gpt4 book ai didi

python - 如何在 Matplotlib/Python 中同时使用虚线底片默认样式 + 线条颜色?

转载 作者:行者123 更新时间:2023-11-28 21:32:40 27 4
gpt4 key购买 nike

使用 Python/Matplotlib 绘制等高线图时,默认行为(对于一种颜色)是负值以虚线表示。这是我想要的功能。但是,如果我设置线条的颜色,它们都会被绘制成实线。我想结合虚线底片和自定义颜色。

如何绘制彩色线条,并保持负虚线样式?

下面,我复制(稍作修改)本教程中的示例:https://www.oreilly.com/library/view/python-data-science/9781491912126/ch04.html

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
Z = f(X, Y)

# Default: 1 color, negatives are dashed
plt.contour(X, Y, Z, colors='black')
plt.show()

# Set colormap: all lines are solid
plt.contour(X, Y, Z, cmap='RdBu')
plt.show()

# Set individual colors: all solid lines
plt.contour(X, Y, Z, colors=['b','b','b','r','r','r','r','r'])
plt.show()

默认值:负数为虚线。 Default

通过colormap设置颜色:全部变成纯色。 Colormap

设置单独的颜色:再次全部为纯色。我希望此处的蓝线自动变为虚线,因为它们是负值。 Individual lines with colors

最佳答案

遗憾的是,负值不同线型的特性并没有暴露给用户。它与线条是否使用单一颜色有关。这会切换属性 monochrome,该属性又决定是否更改线型。

因此,一个快速的破解方法是将 monochrome 属性设置为 True 并重置线条样式。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
Z = f(X, Y)


cntr = plt.contour(X, Y, Z, cmap='RdBu')
cntr.monochrome = True
for col, ls in zip(cntr.collections, cntr._process_linestyles()):
col.set_linestyle(ls)

plt.show()

enter image description here

由于这使用了私有(private)的._process_linestyles() 属性,因此不建议在生产代码中使用它;而是使用 @WarrenWeckesser's answer或以下选项。

这里我想指出根据级别设置linestyles 先验的选项:

import matplotlib.pyplot as plt
import matplotlib.ticker
import numpy as np

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
Z = f(X, Y)


loc = matplotlib.ticker.MaxNLocator(7)
lvls = loc.tick_values(Z.min(), Z.max())
cntr = plt.contour(X, Y, Z, levels=lvls, cmap='RdBu',
linestyles=np.where(lvls >= 0, "-", "--"))

plt.show()

关于python - 如何在 Matplotlib/Python 中同时使用虚线底片默认样式 + 线条颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56004938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com