有没有简单的方法在matplotlib中绘制曲折或波浪线?
我知道不同的线条样式(http://matplotlib.org/examples/lines_bars_and_markers/line_styles_reference.html),我当然知道不是绘图
plt.figure(); plt.plot(n.linspace(0.7,1.42,100),[0.7]*100)
我可以绘制
plt.figure(); plt.plot(n.linspace(0.7,1.42,100),[0.69,0.71]*50)
对于曲折线,但我想知道是否有更简单的方法?
答案 0 :(得分:4)
是的,但它有一点点后果。最简单的方法是在matplotlib中使用xkcd模式。
import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
plt.figure()
plt.plot(np.linspace(0.7,1.42,100),[0.7]*100)
plt.show()
如果您查看code used to achieve this,您会发现xkcd
函数对rcParams
字典进行了一些更改。最值得注意的是条目rcParams['path.sketch'] = (scale, length, randomness)
是path effect,能够模拟手绘外观。 xkcd样式使用的默认参数是:
# explanation from the docstring of the xkcd function
scale = 1 # amplitude of the wiggle
length = 100 # length of the wiggle along the line
randomness = 2 # scale factor for shrinking and expanding the length
如果您从rcParams
包中导入条目,则可以更改matplotlib
字典中的条目。在以下示例中,我将randomness
值从2
增加到100
:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['path.sketch'] = (1, 100, 100)
plt.plot(np.linspace(0.7,1.42,100),[0.7]*100)
plt.show()
这将导致以下情节:
正如您所看到的,更多的摇晃和用于刻度的字体仍然是正常的'。然而,风格也用于绘制轴,到目前为止我还没有找到解决方法。 有两种解决方法:
选项1可以这样实现:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['path.sketch'] = (10, 10, 100)
fig = plt.plot(np.linspace(0.7,1.42,100),[0.7]*100)
for pos, spine in fig[0].axes.spines.items():
spine.set_visible(False)
plt.show()
其中,在我看来看起来还不错。无论如何,地块周围的边界都被高估了。
要获得均匀波浪线,请将randomness参数设置为1并选择幅度和长度的小值:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['path.sketch'] = (3, 10, 1)
fig = plt.plot(np.linspace(0.7,1.42,100),[0.7]*100)
for pos, spine in fig[0].axes.spines.items():
spine.set_visible(False)
plt.show()
rcParams['path.sketch'] = (100, 1, 100)