文章目录

  • matplotlib简介
  • 用matplotlib画折线图
  • 设置图片大小
  • 调整x轴、y轴刻度
  • 设置中文显示
  • 添加描述信息(x、y的label、标题、图例)
  • 标注特殊点
  • 保存图片
  • 案例
  • 散点图
  • 条形图
  • 直方图
  • 其他


matplotlib简介

  1. 最流行的python底层绘图库,名字取材于matlab,模仿matlab构建;
  2. 能将数据进行可视化,更直观的呈现,使数据更加客观、更具说服力。

用matplotlib画折线图

from matplotlib import pyplot as plt

x = range(2, 26, 2)  # 2,……24
y = [15, 12, 14, 18, 13, 16, 17, 15, 16.5, 18, 15, 16]

plt.plot(x, y, marker='o')  # 可自定义绘图风格,制定线条颜色(color)、线条类型(linestyle)、粗细等
plt.grid(alpha=0.4)  # 绘制网格,alpha为透明度,数值越小越透明
plt.show()

运行结果:

python 透明背景图片和另一个背景图片叠加_中文显示

注:

  1. x、y应是可迭代对象;
  2. plot时可设置颜色和线条类型:

设置图片大小

plt.figure(figsize=(20, 8), dpi=80)

ctrl+b查看源码:

python 透明背景图片和另一个背景图片叠加_图例_02


num:图像编号或名称,数字为编号,字符串为名称;

figsize:制定fig的宽和高,单位为英寸(1英寸=2.54cm);

dpi:图像分辨率,即每英寸多少个像素,缺省值为80;

facecolor:背景颜色;

edgecolor:边框颜色;

frameon:是否显示边框。

matplotlib.pyplot是有状态的,亦即它会保存当前图片和作图区域的状态,新的作图函数会作用在当前图片的状态基础之上;要想绘制多个图,可在绘图之前进行plt.figure()的设置。

调整x轴、y轴刻度

plt.xticks(x)
plt.xticks(x)
plt.xticks(range(2, 25, 1), rotation=45) # 还可设置旋转角度

xtick_lables = [i/2 for i in range(4, 49)]
plt.xticks(xtick_labels)

plt.xticks(xtick_labels[::3])  #/ 当刻度太密集时用列表的步长(间隔取值)来解决

plt.yticks(range(min(y), max(y)+1)

python 透明背景图片和另一个背景图片叠加_中文显示_03

设置中文显示

python 透明背景图片和另一个背景图片叠加_中文显示_04


法一:

font = {'family': 'Microsoft YaHei',
        'weight': 'bold',
        'size':larger'}  # 可查看matplotlib.rc源码
matplotlib.rc("font", **font)
matplotlib.rc('font', family='Microsoft YaHei', weight='Bold')
}

法二:

my_font = font_manager.FontProperties(fname = '/System./Library/Fonts/PingFang.ttc)

# plt.xticks 设置时加上fontproperties=my_font

添加描述信息(x、y的label、标题、图例)

plt.xlabel("时间", fontproperties=myfont)
plt.ylabel("温度", fontproperties=myfont)
plt.title("气温")

# 添加图例:plot时添加label;plt.legend
plt.plot(x,y1, label="我”)
plt.plot(x,y2, label="同桌”)
plt.legend(prop=my_font, loc="upper left")  # 字体和位置

标注特殊点

python 透明背景图片和另一个背景图片叠加_图例_05

python 透明背景图片和另一个背景图片叠加_中文显示_06

保存图片

plt.savefig("./my_figure")  # 可保存为svg这种矢量图格式,放大不会有锯齿

案例

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random

my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)  # 宋体

x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]

plt.figure(figsize=(20, 8), dpi=80)

# 调整x轴刻度
xtick_labels = ['10点{}分'.format(i) for i in range(60)]
xtick_labels += ['11点{}分'.format(i) for i in range(60)]
plt.xticks(list(x)[::3], xtick_labels[::3], rotation=45, fontproperties=my_font)

# 添加描述信息
plt.xlabel('时间', fontproperties=my_font)
plt.ylabel('时间', fontproperties=my_font)
plt.title("10点到12点每分钟的气温变化情况", fontproperties=my_font)

plt.plot(x, y)
plt.show()

python 透明背景图片和另一个背景图片叠加_图例_07

散点图

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random

my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)

y_3 = [random.randint(6, 23) for i in range(31)]
y_10 = [random.randint(12, 25) for i in range(31)]

x_3 = range(1, 32)
x_10 = range(51, 82)

# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)

# 调整x轴的(显示)刻度
_x = list(x_3) + list(x_10)
xtick_labels = ["3月{}日".format(i) for i in x_3]
xtick_labels += ["10月{}日".format(i-50) for i in x_10]
plt.xticks(_x, xtick_labels, fontproperties=my_font, rotation=45)

# 画图
plt.scatter(x_3, y_3, label='三月')
plt.scatter(x_10, y_10, label='十月')
plt.legend(prop=my_font, loc='upper left')
plt.show()

运行结果:

python 透明背景图片和另一个背景图片叠加_保存图片_08

条形图

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random

my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)

a = ["猩球崛起", "终极之战", "伦敦克尔", "蜘蛛侠"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]

bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i + bar_width for i in x_14]
x_16 = [i + bar_width*2 for i in x_14]

# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)

plt.bar(range(len(a)), b_14, width=bar_width, label="9月14日")
plt.bar(x_15, b_15, width=bar_width, label="9月15日")
plt.bar(x_16, b_16, width=bar_width, label="9月16日")

# 设置图例
plt.legend(prop=my_font)

# 设置x轴的刻度
plt.xticks(x_15, a, fontproperties=my_font)

plt.show()

运行结果:

python 透明背景图片和另一个背景图片叠加_保存图片_09

直方图

python 透明背景图片和另一个背景图片叠加_中文显示_10


例:

python 透明背景图片和另一个背景图片叠加_保存图片_11


python 透明背景图片和另一个背景图片叠加_保存图片_12


python 透明背景图片和另一个背景图片叠加_中文显示_13


python 透明背景图片和另一个背景图片叠加_中文显示_14


python 透明背景图片和另一个背景图片叠加_中文显示_15

其他


python 透明背景图片和另一个背景图片叠加_保存图片_16


2. 用百度的echarts可以画很多非常炫酷的图表。