Python:在 Seaborn 中更改标记类型

Tob*_*ins 6 python graph matplotlib seaborn

在常规 matplotlib 中,您可以为绘图指定各种标记样式。但是,如果我 import 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()
Run Code Online (Sandbox Code Playgroud)

产生这个:简单的 Seaborn 情节

然而,将第 6 行的 'ok' 更改为 '+k',不再显示绘制点。如果我不导入seaborn它应该正常工作:Regular Plot With Cross Marker

有人能告诉我seaborn在使用时如何将标记样式更改为十字类型吗?

Imp*_*est 6

这种行为的原因是 seaborn 将标记边缘宽度设置为零。(见来源)。

正如seaborn已知问题中所指出的那样

matplotlib 标记样式如何工作的一个不幸后果是,当默认的 seaborn 样式生效时,线条艺术标记(例如"+")或facecolor设置为的标记"none"将不可见。这可以通过在函数调用中或在 rcParams 中全局使用不同的markeredgewidth(别名为mew)来更改。

这个问题告诉我们它以及这个问题

在这种情况下,解决方案是将标记边缘宽度设置为大于零的值,

但是,正如@mwaskom 在评论中指出的那样,实际上还有更多内容。在这个问题中,有人认为标记应该分为两类,批量样式标记和线条艺术标记。这已在 matplotlib 2.0 版中部分完成,您可以获得“加号”作为标记,使用marker="P"并且即使使用markeredgewidth=0.

plt.plot(x_cross, y_cross, 'kP')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明