gpt4 book ai didi

matplotlib - matplotlib-黑白颜色图(带有破折号,点等)

转载 作者:行者123 更新时间:2023-12-03 08:22:56 28 4
gpt4 key购买 nike

我正在使用matplotlib创建2d线图。出于发布目的,我希望将这些图用黑白显示(而不是灰度),并且我正在努力为此找到一种非侵入式解决方案。

gnuplot会自动更改不同行的虚线图案,matplotlib是否有可能类似?

最佳答案

下面,我提供了将彩色线条转换为具有独特风格的黑色线条的函数。我的快速测试显示,经过7行,颜色重复出现。如果不是这种情况(我弄错了),则需要对提供的例程中的“常量” COLORMAP进行细微调整。

这是例程和示例:

import matplotlib.pyplot as plt
import numpy as np

def setAxLinesBW(ax):
"""
Take each Line2D in the axes, ax, and convert the line style to be
suitable for black and white viewing.
"""
MARKERSIZE = 3

COLORMAP = {
'b': {'marker': None, 'dash': (None,None)},
'g': {'marker': None, 'dash': [5,5]},
'r': {'marker': None, 'dash': [5,3,1,3]},
'c': {'marker': None, 'dash': [1,3]},
'm': {'marker': None, 'dash': [5,2,5,2,5,10]},
'y': {'marker': None, 'dash': [5,3,1,2,1,10]},
'k': {'marker': 'o', 'dash': (None,None)} #[1,2,1,10]}
}


lines_to_adjust = ax.get_lines()
try:
lines_to_adjust += ax.get_legend().get_lines()
except AttributeError:
pass

for line in lines_to_adjust:
origColor = line.get_color()
line.set_color('black')
line.set_dashes(COLORMAP[origColor]['dash'])
line.set_marker(COLORMAP[origColor]['marker'])
line.set_markersize(MARKERSIZE)

def setFigLinesBW(fig):
"""
Take each axes in the figure, and for each line in the axes, make the
line viewable in black and white.
"""
for ax in fig.get_axes():
setAxLinesBW(ax)

xval = np.arange(100)*.01

fig = plt.figure()
ax = fig.add_subplot(211)

ax.plot(xval,np.cos(2*np.pi*xval))
ax.plot(xval,np.cos(3*np.pi*xval))
ax.plot(xval,np.cos(4*np.pi*xval))
ax.plot(xval,np.cos(5*np.pi*xval))
ax.plot(xval,np.cos(6*np.pi*xval))
ax.plot(xval,np.cos(7*np.pi*xval))
ax.plot(xval,np.cos(8*np.pi*xval))

ax = fig.add_subplot(212)
ax.plot(xval,np.cos(2*np.pi*xval))
ax.plot(xval,np.cos(3*np.pi*xval))
ax.plot(xval,np.cos(4*np.pi*xval))
ax.plot(xval,np.cos(5*np.pi*xval))
ax.plot(xval,np.cos(6*np.pi*xval))
ax.plot(xval,np.cos(7*np.pi*xval))
ax.plot(xval,np.cos(8*np.pi*xval))

fig.savefig("colorDemo.png")
setFigLinesBW(fig)
fig.savefig("bwDemo.png")

这提供了以下两个图:
颜色第一:

然后以黑白显示:

您可以调整每种颜色转换为样式的方式。如果您只想使用破折号样式(-。vs.-vs.您想要的任何样式),请将 COLORMAP对应的“标记”值设置为 None并调整“破折号”样式,反之亦然。

例如,字典中的最后一个颜色是“k”(黑色);最初,我只有一个虚线图案 [1,2,1,10],对应于所示的一个像素,两个未显示,一个未显示,10个未显示,这是一个点-点-空格模式。然后我将其注释掉,将破折号设置为(None,None),这是一种非常正式的实线表达方式,并在圆圈上添加了标记“o”。

我还设置了一个“常量” MARKERSIZE,它将设置每个标记的大小,因为我发现默认大小有点大。

当您的行已经具有破折号或标记模式时,这显然无法解决问题,但是您可以使用这些例程作为构建更复杂转换器的起点。例如,如果原始图具有红色实线和红色虚线,则使用这些例程,它们都将变成黑色的点划线。使用它们时要记住的一点。

关于matplotlib - matplotlib-黑白颜色图(带有破折号,点等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358118/

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