繁体   English   中英

Python:改变Seaborn中的标记类型

[英]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 
  • 使用markeredgewidthmew关键字参数

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM