Python matplotlib中清晰可读的灰度线图?
我是学计算机科学的本科生。对于我的大多数课程,我必须制作某种图形来显示我的结果。我的大多数教授都想把这些图表打印出来(或者,如果他们接受PDF,他们会自己打印一份),以便给它打分。我使用Python matplotlib中清晰可读的灰度线图?,python,printing,graph,charts,matplotlib,Python,Printing,Graph,Charts,Matplotlib,我是学计算机科学的本科生。对于我的大多数课程,我必须制作某种图形来显示我的结果。我的大多数教授都想把这些图表打印出来(或者,如果他们接受PDF,他们会自己打印一份),以便给它打分。我使用matplotlib和其他一些工具来生成图形,效果很好 然而,我的问题是,我打印出来的(彩色)线条图往往无法解读。举一个相对温和的例子: 一个更糟糕的例子(可能是我对图形本身设计的更多问题)是: 当以黑白打印出来时,这个系列就无法区分了 下面是我可能用来生成图形的脚本之一的示例。我真的很想找到一种方法,使图形
matplotlib
和其他一些工具来生成图形,效果很好
然而,我的问题是,我打印出来的(彩色)线条图往往无法解读。举一个相对温和的例子:
一个更糟糕的例子(可能是我对图形本身设计的更多问题)是:
当以黑白打印出来时,这个系列就无法区分了
下面是我可能用来生成图形的脚本之一的示例。我真的很想找到一种方法,使图形在黑白打印机上打印时看起来尽可能清晰——我该怎么做呢?在B/W中,哪些技术对于提高图表的可读性最有效
from matplotlib import pyplot
SERIES_COLORS = 'bgrcmyk'
def plot_series(xy_pairs, series, color):
label_fmt = "{}Lock"
x, y_lists = zip(*xy_pairs)
normalized_ys = [[y / numpy.linalg.norm(ys) for y in ys]
for ys in y_lists]
y = [numpy.average(y_list) for i, y_list
in enumerate(normalized_ys)]
y_err = [numpy.std(y_list) for i, y_list in
enumerate(normalized_ys)]
pyplot.errorbar(x, y, y_err,
label=label_fmt.format(series),
fmt='{}o-'.format(color)
ls='-')
def main():
big_dataset = {
'a': data_for_a,
'b': data_for_b,
'c': data_for_c,.
....
}
for series, color in zip(SERIES_COLORS, big_dataset):
processed = do_work(big_dataset[series])
plot_series(processed, series, color)
pyplot.show()
您可以使用不同的线条样式和标记 这是一个很好的例子 希望能有帮助
#!/usr/bin/env python
# This should probably be replaced with a demo that shows all
# line and marker types in a single panel, with labels.
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import numpy as np
t = np.arange(0.0, 1.0, 0.1)
s = np.sin(2*np.pi*t)
linestyles = ['_', '-', '--', ':']
markers = []
for m in Line2D.markers:
try:
if len(m) == 1 and m != ' ':
markers.append(m)
except TypeError:
pass
styles = markers + [
r'$\lambda$',
r'$\bowtie$',
r'$\circlearrowleft$',
r'$\clubsuit$',
r'$\checkmark$']
colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')
plt.figure(figsize=(8,8))
axisNum = 0
for row in range(6):
for col in range(5):
axisNum += 1
ax = plt.subplot(6, 5, axisNum)
color = colors[axisNum % len(colors)]
if axisNum < len(linestyles):
plt.plot(t, s, linestyles[axisNum], color=color, markersize=10)
else:
style = styles[(axisNum - len(linestyles)) % len(styles)]
plt.plot(t, s, linestyle='None', marker=style, color=color, markersize=10)
ax.set_yticklabels([])
ax.set_xticklabels([])
plt.show()
x = linspace(0,1,10)
ls = ["-","--","-."]
markers = ["o","s","d"]
clrs = ["k"]
k = 1
for l in ls:
for m in markers:
for c in clrs:
plot(x,x**k,m+l+c)
k+=1