2013-02-10 108 views
5

我想弄清楚如何繪製數據單元中的寬度線。例如,在下面的代碼片段中,我希望寬度爲80的線的水平部分始終從y = -40延伸到y = + 40,並且保持這種方式即使座標系的極限更改。有沒有一種方法可以通過matplotlib中的Line2D對象實現這一點?任何其他方式獲得類似的效果?Matplotlib:繪製與數據座標中給定的寬度線

from pylab import figure, gca, Line2D 

figure() 
ax = gca() 
ax.set_xlim(-50, 50) 
ax.set_ylim(-75, 75) 

ax.add_line(Line2D([-50, 0, 50], [-50, 0, 0], linewidth=80)) 

ax.grid() 

line width in screen coordinates

+0

只是爲了澄清:你的意思是說,如果窗口擴大了,你希望藍色線在你張貼的圖片中從* y = -25到* y = 25的距離*仍然* – unutbu 2013-02-10 13:53:59

+0

@unutbu寬度設置爲80,我認爲OP總是希望它從-40到40。你的答案似乎是OP所需要的。 – 2013-02-10 14:05:36

+0

[這裏](http://stackoverflow.com/a/19397279/1681480)是一種使用任意角度的線條,而不僅僅是垂直填充的方式... – beroe 2013-10-16 18:11:01

回答

6

你可以使用fill_between

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 
ax.set_xlim(-50, 50) 
ax.set_ylim(-75, 75) 
x = [-50, 0, 50] 
y = np.array([-50, 0, 0]) 

ax.fill_between(x,y-30,y+30) 

ax.grid() 
plt.show() 

產量

enter image description here

但不同於由

產生的線
ax.add_line(Line2D([-50, 0, 50], [-50, 0, 0], linewidth=80)) 

線的垂直厚度在數據座標中始終保持不變。請參閱link to documentation

+0

+1。在這種情況下,呼叫可以簡化爲'ax.fill_between([ - 50,50], - 25,25)',byw。 – 2013-02-10 14:08:11

+0

謝謝,但這不適用於不完全水平的線條,對嗎?我應該更具體一點,我想這樣做的任意線 - 我會編輯我的問題澄清。 – mvoelske 2013-02-10 14:46:07

+0

實際上,'fill_between'可以[適用於曲線](http://matplotlib.org/examples/pylab_examples/fill_between_demo.html)。 – unutbu 2013-02-10 15:03:30

1

爲了用數據單元中的線寬繪製線條,您可能需要查看this answer

它使用類data_linewidth_plot,它類似於plt.plot()命令的簽名。

l = data_linewidth_plot(x, y, ax=ax, label='some line', linewidth = 1, alpha = 0.4) 

linewidth參數以(y-)數據單位解釋。