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

6

我想画一个带虚线边框线的标记(星形)。在matplotlib中是否有这样一个方法?以下是一个绘制实心边框标记的简单代码:

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

感谢您提前的帮助!
谢谢!
3个回答

2

我使用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()

enter image description here


-1

一个“自己动手”的方法。

  1. 绘制一个星形。

  2. 绘制一些圆形,颜色为白色的边缘线。这将覆盖星形的边界。因此星形看起来像虚线。

  3. 用金色填充星形,但不要描边。

代码如下:

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()

结果图如下:

result figure

有点奇怪。但它能用!

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
我给这个回答点了踩,只是因为它不够通用。 - abcd

-1
注意!由于某种原因,这个回答被投票下降了,但示例仍然有效(至少对于Python 2.7.15rc1和Python 3.6.9,在我获得更新版本的访问权限后,我将用它们进行测试)。
但是!图必须保存为*.eps格式,保存为*.png格式不起作用--我不知道为什么。也许与渲染有关?我在gimp中验证了*.eps文件,打开的方框内没有线条,所以文件似乎是正确的。
嗯,我遇到了完全相反的问题,即我想使用实线来绘制标记(而不是虚线、点线等)。 如果你给plot函数传递一个linestyle参数,它应该(对我来说很不幸)以传递的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(透明度通道)的最后一个值更改为,例如,0.0001。这样可以保持标记实心,但仍然'几乎'透明。

使用这种方式的linestyle对我来说并不改变标记样式。 - abcd
@abcd linestyle改变了线条的样式(顾名思义 ;)). 要更改标记,请使用marker选项,例如,marker=d或类似的东西。 - shycha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接