在matplotlib中为圆圈设置开/关墨水的顺序

时间:2015-02-24 07:18:08

标签: python matplotlib

我知道如何更改一行的开/关墨点顺序,我想对没有填充的圆做同样的事情。圆圈似乎没有相同的set_dashes()函数,并且set_linestyle()只接受像'solid'这样的字符串,但不接受(在刻度线上,关闭刻度线)的元组。

这是一个最小的例子,我希望圆圈具有与线图相同的破折号。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle


fig = plt.figure() 
ax = fig.add_subplot(111) 

# plot a line with dashes
line = plt.plot(np.arange(2))[0]
plt.setp(line, 'dashes')
line.set_dashes((20,2))

# plot a circle with dashes
circle = Circle(xy=(0,0), radius=1, fill=False, ec='b', lw=2, linestyle='dashed')
plt.setp(circle, 'linestyle')
ax.add_artist(circle)

plt.show()

1 个答案:

答案 0 :(得分:0)

最简单的方法是手动生成圆圈的点数'。这是一个最低限度的例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

fig = plt.figure() 
ax = fig.add_subplot(111) 

# plot a line with dashes
line = plt.plot(np.arange(2))[0]
plt.setp(line, 'dashes')
line.set_dashes((20,2))

# plot a circle with dashes
Radius = 1
xC = np.linspace(0, Radius, 100)
yC = np.sqrt(Radius**2 - xC**2)
line = plt.plot(xC, yC)[0]
plt.setp(line, 'dashes')
line.set_dashes((20,2))

plt.show()

enter image description here

可以轻松地进行一些改进 - 您可能已经考虑过这些但我认为我会添加它们以防万一。首先要让圈子成为“循环”。我们应该使用相等的方面轴:

fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 

然后你可能想要绘制圆的整个范围。这最容易通过分别绘制双方来完成:

# plot a circle with dashes
Radius = 1
xC = np.linspace(-Radius, Radius, 100)
yC_positive = np.sqrt(Radius**2 - xC**2)
yC_negative = -np.sqrt(Radius**2 - xC**2)

line = plt.plot(xC, yC_positive)[0]
plt.setp(line, 'dashes')
line.set_dashes((20,2))

line = plt.plot(xC, yC_negative)[0]
plt.setp(line, 'dashes')
line.set_dashes((20,2))

把所有这些放在一起我们得到了

enter image description here

我故意让双方的颜色不同,以表明哪一个是哪个。