Matplotlib 绘图笔记

Matplotlib 绘图笔记


一般需要导入以下库函数:

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

线条类型

字符 类型
'-' 实线
'--' 虚线
'-.' 虚点线
':' 点线

折点类型

关键字 类型
marker 折点形状
markeredgecolor 或 mec 折点外边颜色
markeredgewidth 或 mew 折点线宽
markerfacecolor 或 mfc 折点实心颜色(背景填充区域)
markerfacecoloralt 或 mfcalt 折点的背景非填充区域的颜色
markersize 或 ms 折点大小

字符 类型
'.'
',' 像素点
'o' 圆点
'v' 下三角点
'^' 上三角点
'<' 左三角点
'>' 右三角点
'1' 下三叉点
'2' 上三叉点
'3' 左三叉点
'4' 右三叉点
's' 正方点
'p' 五角点
'*' 星形点
'h' 六边形点 1
'H' 六边形点 2
'+' 加号点
'x' 乘号点
'D' 实心菱形点
'd' 瘦菱形点
'_' 横线点

颜色类型

字符 颜色
‘b’ 蓝色,blue
‘g’ 绿色,green
‘r’ 红色,red
‘c’ 青色,cyan
‘m’ 品红,magenta
‘y’ 黄色,yellow
‘k’ 黑色,black
‘w’ 白色,white

其他颜色还有

'aliceblue':            '#F0F8FF',
'antiquewhite':         '#FAEBD7',
'aqua':                 '#00FFFF',
'aquamarine':           '#7FFFD4',
'azure':                '#F0FFFF',
'beige':                '#F5F5DC',
'bisque':               '#FFE4C4',
'black':                '#000000',
'blanchedalmond':       '#FFEBCD',
'blue':                 '#0000FF',
'blueviolet':           '#8A2BE2',
'brown':                '#A52A2A',
'burlywood':            '#DEB887',
'cadetblue':            '#5F9EA0',
'chartreuse':           '#7FFF00',
'chocolate':            '#D2691E',
'coral':                '#FF7F50',
'cornflowerblue':       '#6495ED',
'cornsilk':             '#FFF8DC',
'crimson':              '#DC143C',
'cyan':                 '#00FFFF',
'darkblue':             '#00008B',
'darkcyan':             '#008B8B',
'darkgoldenrod':        '#B8860B',
'darkgray':             '#A9A9A9',
'darkgreen':            '#006400',
'darkkhaki':            '#BDB76B',
'darkmagenta':          '#8B008B',
'darkolivegreen':       '#556B2F',
'darkorange':           '#FF8C00',
'darkorchid':           '#9932CC',
'darkred':              '#8B0000',
'darksalmon':           '#E9967A',
'darkseagreen':         '#8FBC8F',
'darkslateblue':        '#483D8B',
'darkslategray':        '#2F4F4F',
'darkturquoise':        '#00CED1',
'darkviolet':           '#9400D3',
'deeppink':             '#FF1493',
'deepskyblue':          '#00BFFF',
'dimgray':              '#696969',
'dodgerblue':           '#1E90FF',
'firebrick':            '#B22222',
'floralwhite':          '#FFFAF0',
'forestgreen':          '#228B22',
'fuchsia':              '#FF00FF',
'gainsboro':            '#DCDCDC',
'ghostwhite':           '#F8F8FF',
'gold':                 '#FFD700',
'goldenrod':            '#DAA520',
'gray':                 '#808080',
'green':                '#008000',
'greenyellow':          '#ADFF2F',
'honeydew':             '#F0FFF0',
'hotpink':              '#FF69B4',
'indianred':            '#CD5C5C',
'indigo':               '#4B0082',
'ivory':                '#FFFFF0',
'khaki':                '#F0E68C',
'lavender':             '#E6E6FA',
'lavenderblush':        '#FFF0F5',
'lawngreen':            '#7CFC00',
'lemonchiffon':         '#FFFACD',
'lightblue':            '#ADD8E6',
'lightcoral':           '#F08080',
'lightcyan':            '#E0FFFF',
'lightgoldenrodyellow': '#FAFAD2',
'lightgreen':           '#90EE90',
'lightgray':            '#D3D3D3',
'lightpink':            '#FFB6C1',
'lightsalmon':          '#FFA07A',
'lightseagreen':        '#20B2AA',
'lightskyblue':         '#87CEFA',
'lightslategray':       '#778899',
'lightsteelblue':       '#B0C4DE',
'lightyellow':          '#FFFFE0',
'lime':                 '#00FF00',
'limegreen':            '#32CD32',
'linen':                '#FAF0E6',
'magenta':              '#FF00FF',
'maroon':               '#800000',
'mediumaquamarine':     '#66CDAA',
'mediumblue':           '#0000CD',
'mediumorchid':         '#BA55D3',
'mediumpurple':         '#9370DB',
'mediumseagreen':       '#3CB371',
'mediumslateblue':      '#7B68EE',
'mediumspringgreen':    '#00FA9A',
'mediumturquoise':      '#48D1CC',
'mediumvioletred':      '#C71585',
'midnightblue':         '#191970',
'mintcream':            '#F5FFFA',
'mistyrose':            '#FFE4E1',
'moccasin':             '#FFE4B5',
'navajowhite':          '#FFDEAD',
'navy':                 '#000080',
'oldlace':              '#FDF5E6',
'olive':                '#808000',
'olivedrab':            '#6B8E23',
'orange':               '#FFA500',
'orangered':            '#FF4500',
'orchid':               '#DA70D6',
'palegoldenrod':        '#EEE8AA',
'palegreen':            '#98FB98',
'paleturquoise':        '#AFEEEE',
'palevioletred':        '#DB7093',
'papayawhip':           '#FFEFD5',
'peachpuff':            '#FFDAB9',
'peru':                 '#CD853F',
'pink':                 '#FFC0CB',
'plum':                 '#DDA0DD',
'powderblue':           '#B0E0E6',
'purple':               '#800080',
'red':                  '#FF0000',
'rosybrown':            '#BC8F8F',
'royalblue':            '#4169E1',
'saddlebrown':          '#8B4513',
'salmon':               '#FA8072',
'sandybrown':           '#FAA460',
'seagreen':             '#2E8B57',
'seashell':             '#FFF5EE',
'sienna':               '#A0522D',
'silver':               '#C0C0C0',
'skyblue':              '#87CEEB',
'slateblue':            '#6A5ACD',
'slategray':            '#708090',
'snow':                 '#FFFAFA',
'springgreen':          '#00FF7F',
'steelblue':            '#4682B4',
'tan':                  '#D2B48C',
'teal':                 '#008080',
'thistle':              '#D8BFD8',
'tomato':               '#FF6347',
'turquoise':            '#40E0D0',
'violet':               '#EE82EE',
'wheat':                '#F5DEB3',
'white':                '#FFFFFF',
'whitesmoke':           '#F5F5F5',
'yellow':               '#FFFF00',
'yellowgreen':          '#9ACD32'

c

问题与美化

不知道为什么,总感觉 matplotlib 画出来的图特别丑,比例也不协调,可选类型也很少,没有 MATLAB 看着舒服。可能是太底层的工具了吧。

接下来总结几个绘图过程中 matplotlib 容易出现的问题及解决方案。

图像布局显示不完全

在使用 matplotlib.pyplot 进行画图的时候,如果 ticklabel 或者 title 等过长、或者过大的话,会发现图像显示不全。其实只需要一个简单的命令就可以解决这个问题:
在保存或者show了之前,使用 plt.tight_layout()

plt.tight_layout()
plt.savefig("test.eps")
plt.show()

plot 中的美化

legend

plot 作图遇到的问题是:label 中的字体太小,放在论文中需要放很大,带来了不方便。还有折点、线的大小都需要额外调整以突出不同数据之间的区别。
而在这方面,点-线的表示里面,matplotlib 默认其 legend 里面的图例是双点连线的,为了和 MATLAB 的一条线穿过一个点一致。可以如下设置

from matplotlib.legend_handler import HandlerLine2D


l1, = plt.plot(
    x, y, 'g-.v', mew=2, label="test",
    markerfacecolor='none', markeredgecolor='g',
    ms=12, linewidth=2.5)

plt.legend(
    l1, ['test'],
    handler_map={l1: HandlerLine2D(numpoints=1)},
    loc="best", fontsize=20)
marker

另外 matplotlib 默认布局边界上的折点不会完全显示,如果想完全显示,可以加以下设置

l1.set_clip_on(False)
grid

调整网格线,包括颜色,方向,线型,线宽以及透明度,使其看起来更舒服:

# 决定方向的网格线是否显示 axis="y"
plt.grid(color="gray", axis="y")
# 设置透明度
plt.grid(color="gray", which="both", linestyle='-.', linewidth=0.5, alpha=0.8) 
# which="both",或者“major”、"minor"
透明度

这里需要注意,透明度设置好,直接保存 plt.savefig("test.eps") 会导致生成的 eps 文件不会产生带有透明度的图像,因此需要先保存为 pdf 格式,再转化为 eps

plt.savefig("test.pdf")
间距

图当中的 title 往往会和图像框挨得很近,为此可以调整间距:

ttl = plt.title('Model', fontsize=18)
ttl.set_position([.5, 1.05])
刻度

刻度字体太大交叠在一起,这时候可以旋转角度

plt.xticks(xrange, fontsize=24, rotation=30)

猜你喜欢

转载自blog.csdn.net/qq_23947237/article/details/89293209