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在使用时如何将标记样式更改为十字类型吗?
这种行为的原因是 seaborn 将标记边缘宽度设置为零。(见来源)。
正如seaborn已知问题中所指出的那样
matplotlib 标记样式如何工作的一个不幸后果是,当默认的 seaborn 样式生效时,线条艺术标记(例如
"+")或facecolor设置为的标记"none"将不可见。这可以通过在函数调用中或在 rcParams 中全局使用不同的markeredgewidth(别名为mew)来更改。
在这种情况下,解决方案是将标记边缘宽度设置为大于零的值,
使用 rcParams(导入 seaborn 后):
plt.rcParams["lines.markeredgewidth"] = 1
Run Code Online (Sandbox Code Playgroud)使用markeredgewidthormew关键字参数
plt.plot(..., mew=1)
Run Code Online (Sandbox Code Playgroud)但是,正如@mwaskom 在评论中指出的那样,实际上还有更多内容。在这个问题中,有人认为标记应该分为两类,批量样式标记和线条艺术标记。这已在 matplotlib 2.0 版中部分完成,您可以获得“加号”作为标记,使用marker="P"并且即使使用markeredgewidth=0.
plt.plot(x_cross, y_cross, 'kP')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4557 次 |
| 最近记录: |