Ответ 1
Ниже я предоставляю функции для преобразования цветной линии на черную линию с уникальным стилем. Мой быстрый тест показал, что после 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. - против любого шаблона, который вы хотите), установите COLORMAP
соответствующее значение "marker" на None
и настройте шаблон "тире", наоборот.
Например, последний цвет в словаре - "k" (для черного); изначально у меня был только штриховой рисунок [1,2,1,10]
, соответствующий одному изображенному изображению, два нет, один показан, 10 нет, который является шаблоном с точкой-точкой. Затем я прокомментировал это, установив тире (None, None), очень формальный способ сказать сплошную линию и добавил маркер "o" для круга.
Я также установил 'constant' MARKERSIZE, который установит размер каждого маркера, потому что я нашел размер по умолчанию немного большим.
Это, очевидно, не относится к случаю, когда ваши строки уже имеют тире или маркер, но вы можете использовать эти подпрограммы в качестве отправной точки для создания более сложного конвертера. Например, если у вашего оригинального сюжета была красная сплошная линия и красная пунктирная линия, они оба превратились бы в черные штриховые линии с этими подпрограммами. Что-то нужно иметь в виду, когда вы их используете.