在常规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()
将第6行的'ok'更改为'+ k'但是,不再显示绘制的点。如果我不导入seaborn
,则可以按原样运行:Regular Plot With Cross Marker
有人可以告诉我在使用seaborn
时如何将标记样式更改为交叉类型吗?
答案 0 :(得分:4)
此行为的原因是seaborn将标记边缘宽度设置为零。 (见source)。
所指出的那样matplotlib标记样式如何工作的一个令人遗憾的结果是,当默认的seaborn样式时,线条艺术标记(例如
"+"
)或facecolor
设置为"none"
的标记将是不可见的是生效的。这可以通过在函数调用中使用不同的markeredgewidth
(别名为mew
)来更改,也可以在rcParams中使用全局更改。
This issue正在告诉我们这个问题以及this one。
在这种情况下,解决方案是将市场宽度设置为大于零的值,
使用rcParams(导入seaborn后):
plt.rcParams["lines.markeredgewidth"] = 1
使用markeredgewidth
或mew
关键字参数
plt.plot(..., mew=1)
然而,正如@mwaskom在评论中指出的那样,实际上还有更多内容。在this issue中,有人认为标记应该分为两类,批量样式标记和线条艺术标记。这已在matplotlib 2.0版中部分完成,您可以在其中获得" plus"作为标记,使用marker="P"
即使markeredgewidth=0
也可以看到此标记。
plt.plot(x_cross, y_cross, 'kP')
答案 1 :(得分:2)
非常喜欢成为一个错误。但是,您可以使用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()