[英]Python: Changing Marker Type in Seaborn
在常规matplotlib中,您可以为图表指定各种标记样式。 但是,如果我导入seaborn
,'+'和'x'样式停止工作并导致图表不显示 - 其他标记类型,例如'o','v'和'*'工作。
简单的例子:
import matplotlib.pyplot as plt
import seaborn as sns
x_cross = [768]
y_cross = [1.028e8]
plt.plot(x_cross, y_cross, 'ok')
plt.gca().set_xlim([10, 1e4])
plt.gca().set_ylim([1, 1e18])
plt.xscale('log')
plt.yscale('log')
plt.show()
产生这个: 简单的Seaborn Plot
但是,将第6行的'ok'更改为'+ k',不再显示绘制的点。 如果我不进口seaborn
它可以正常工作: 使用十字标记的常规绘图
当seaborn
使用seaborn
时,有人可以告诉我如何将标记样式更改为交叉类型吗?
这种行为的原因是seaborn将标记边缘宽度设置为零。 (见来源 )。
正如在seaborn已知问题中所指出的那样
matplotlib标记样式如何工作的一个令人遗憾的结果是,当默认的seaborn样式生效时,线条艺术标记(例如
"+"
)或facecolor
设置为"none"
标记将是不可见的。 这可以通过在函数调用中使用不同的markeredgewidth
(别名为mew
)来更改,或者在rcParams中全局使用。
在这种情况下,解决方案是将市场宽度设置为大于零的值,
使用rcParams(导入seaborn后):
plt.rcParams["lines.markeredgewidth"] = 1
使用markeredgewidth
或mew
关键字参数
plt.plot(..., mew=1)
但是,正如@mwaskom在评论中指出的那样,实际上还有更多内容。 在这个问题中 ,有人认为标记应该分为两类,批量样式标记和线条艺术标记。 这已在matplotlib 2.0版中部分完成,您可以使用marker="P"
获得“plus”作为标记,即使markeredgewidth=0
,此标记也可见。
plt.plot(x_cross, y_cross, 'kP')
这很像是一个bug。 但是,您可以通过mew
关键字设置标记边缘线宽以获得所需内容:
import matplotlib.pyplot as plt
import seaborn as sns
x_cross = [768]
y_cross = [1.028e8]
# set marker edge line width to 0.5
plt.plot(x_cross, y_cross, '+k', mew=.5)
plt.gca().set_xlim([10, 1e4])
plt.gca().set_ylim([1, 1e18])
plt.xscale('log')
plt.yscale('log')
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.