如何在matplotlib中绘制带有虚线/点线边缘的标记?

juzqafwq  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(107)

我想画一个标记(一个星星)与虚线边框线,而不是一个坚实的边界。在matplotlib中有没有办法做到这一点?下面是一个简单的代码,它绘制了一个带有实心边框的标记:

plot([1],[1],marker=(5,1,0),markersize=30,mfc='gold',mec='k',mew=1)

字符串
提前感谢您的帮助!

bxpogfeg

bxpogfeg1#

我用scatter来实现

import matplotlib.pyplot as plt
plt.gcf().set_size_inches(6,4)
plt.scatter(0.5, 0, marker='*', s=1000, facecolors='y', edgecolors='b')
plt.scatter(1.5, 0, marker='*',s=1000, facecolors='y', edgecolors='b',linestyle='--')
plt.xlim(0,2)
plt.show()

字符串


的数据

lztngnrs

lztngnrs2#

一种“DIY”方法。
1.画一个星星。
1.画一些没有白色标记的圆圈。它将覆盖星星边界。所以星星看起来像虚线。
1.用金色填充星星,但没有边框。
代码看起来像这样:

import matplotlib.pyplot as plt

plt.plot([1], [1], marker=(5, 1, 0), markersize=30, mfc='none', mec='k', mew=1)

for i in range(4):
    plt.plot([1], [1], marker='o', markersize=30-5*i,
             mfc='none', mec='w', mew=1)

plt.plot([1], [1], marker=(5, 1, 0), markersize=30, mfc='gold', mec='k', mew=0)
plt.show()

字符串
结果图如下所示:
x1c 0d1x的数据
有点奇怪。但它有效!

1hdlvixo

1hdlvixo3#

注意!**由于某种原因,这个响应被否决了,而示例仍然有效(至少对于Python 2.7.15rc1Python 3.6.9,当我可以访问新版本时,我会用它们来测试)。

但是!绘图必须保存为*.eps,保存为*.png不起作用-我不知道为什么。也许是渲染的东西..?我验证了*.eps文件,在gimp中打开它,打开的方块内没有线条,所以文件似乎是正确的。

好吧,我有完全相反的问题,即,我想用实线绘制标记(而不是虚线,虚线等)。如果你传递一个linestyleplot,它应该(不幸的是)以传递的linestyle的样式绘制标记边缘。最小工作示例:

import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5];
y = [0, 1, 4, 9, 16, 25];
plt.plot(x, y, 
         label='y = x^2',
         linestyle=':',
         marker='s',
         color='r',
         mec='r',
         markersize=10,
         mfc=(1,1,1,0.0)
);
plt.legend(loc='best', ncol=1, fontsize=13);
plt.savefig('/tmp/test.eps', format='eps', dpi=400, bbox_inches='tight');

字符串
是的,我知道,Python中没有分号。:)这很有趣,但是标记在plt.show()之后不可见--需要保存整个情节。如果你想恢复实心标记,只需将mfc(我假设是alpha通道)中的最后一个值更改为0.0001。这允许保持标记物实心但仍然“几乎”透明。

相关问题