目录
一、读取数据
(1)文件中读取数据
(2)代码中直接读取
二、画图
折线图
要想指定横纵轴的刻度范围或指定相应取值:(或者X轴不规则增长)
柱状图
其实现在有很多在线网站就可以直接导入数据画图,不需要使用python也可以直接画图。
使用python代码画图主要有两个步骤:
- 读取数据
- 画图(调整图的布局)
一、读取数据
数据读取有两种方式: 一是从文件中读取(.csv;.xls;.xlsx等);二是直接在代码中赋值
(1)文件中读取数据
- 首先,安装三个模块
pip install xlrd xlwt xltuils
- 读取数据
import xlwt
import xlrd
from xlutils.copy import copy
from xlrd import open_workbook
data = xlrd.open_workbook('data.xlsx') # 1.读取工作表 修改为自己的数据表的名字
table = data.sheet_by_name('one') # 2.读取当前sheet表对象 one为表中sheet的名字 改为自己的
rows = table.nrows # 获取行数
x_data = []
y_data1 = []
y_data2 = []
y_data3 = []
print('一共有{}行数据'.format(rows))
for i in range(1,rows):
x = table.row_values(i)[3] # 3.读取表中想要的数据列 从0开始排序 3是第四列
y1 = table.row_values(i)[4]
y2 = table.row_values(i)[5]
y3 = table.row_values(i)[6]
y_data3.append(y3) # 4.把读取的数据加入到y_data3列表中
y_data2.append(y2)
y_data1.append(y1)
x_data.append(x)
(2)代码中直接读取
直接将对应的X,Y值存在数组中即可
x_data = [1,2,3,4,5,6]
y_data = [0.1,0.2,0.3,0.4,0.5,0.6]
二、画图
折线图
import matplotlib as mpl
#mpl.use("TkAgg") # Use TKAgg to show figures
import matplotlib.pyplot as plt
fig2 = plt.figure(figsize=(7,5))
plt.plot(x_data,y_data,c='g') # 1.过点画线
#plt.plot(x_data1,y_data1)
# 一个图中要画出多条线的时候,只需要再使用plt.plot画出另一条线即可
plt.scatter(x_data , y_data) # 2.画点
plt.title('X-Y Test') # 3. 图标题
plt.xlabel("X") # 4. X轴名字
plt.ylabel("Y") # 5. Y轴名字
plt.savefig("test.png")
若想在一个图中同时画出多条折线,只需要再次使用 plt.plot(x,y) 即可
这种方式画出的图如下:
但是,这个图有一个问题,图中的直线穿过散点,看起来并不美观,所以想有没有什么方法可以让
“点覆盖线”呢?
#修改这两句代码,类似于加上点和线的优先级
plt.plot(x_data,y_data,zorder=1,c='g') # 1.过点画线
plt.scatter(x_data , y_data,zorder=2) # 2.画点
效果如下:
要想指定横纵轴的刻度范围或指定相应取值:(或者X轴不规则增长)
#第一种
my_x_ticks = np.arange(6, 38, 2) # 从6到38 间隔2增长(不包括38)
plt.xticks(my_x_ticks) #设定x轴
plt.yticks(my_x_ticks) #设定y轴
#第二种
plt.xticks([1,3,4,6,9]) #设定x轴
#第三种
plt.xlim(91,96) #设定x轴取值范围 min和max
plt.ylim(91,96) #设定y轴取值范围 min和max
#第四种
plt.xscale('symlog') #x轴坐标是以 10^n 为刻度 10,100 ,1000
plt.yscale('symlog') #y轴坐标是以 10^n 为刻度 10,100 ,1000
另:一个小插曲,我想要在图中单独标出一个点为不同的颜色(红色),但是最开始想的是用ps修图,但是后来同学说可以在同一个位置输出另一个颜色的点覆盖一下,才恍然大悟!
plt.scatter( [3] ,[0.3], zorder=2 , c='r')
效果如下:
柱状图
以ABC三地 分别有 类别 1 2 3三种商品的数量:
import numpy as np
import matplotlib as mpl
#mpl.use("TkAgg") # Use TKAgg to show figures
import matplotlib.pyplot as plt
#A B C 可理解三个地方 每个地点有 类别1 2 3的数据
X_label = ["A", "B", "C"] # 1.X轴上的各种选择
Value_1 = [1, 4, 7] # 2.类别1 对应的A B C的值
Value_2 = [2, 5, 8] # 3.类别2 对应的A B C的值
Value_3 = [3, 6, 9] # 4.类别3 对应的A B C的值
# 创建分组柱状图,需要自己控制x轴坐标
xticks = np.arange(len(X_label))
fig, ax = plt.subplots(figsize=(10, 7))
#A B C 中x的数量
ax.bar(xticks, Value_1, width=0.15, label="1") # 5.width是柱子的宽度
ax.bar(xticks + 0.22, Value_2, width=0.15, label="2") # 6.0.22 是调整两个柱之间的距离
ax.bar(xticks + 0.44, Value_3, width=0.15, label="3")
plt.legend(['1','2','3']) # 7.图例
# 最后调整x轴标签的位置
ax.set_xticks(xticks + 0.25)
ax.set_xticklabels(X_label)
plt.title('X-Y Test') # 8. 图标题
plt.xlabel("X") # 9. X轴名字
plt.ylabel("Y") # 10. Y轴名字
plt.savefig("test.png")
效果如下:
另:
想要调整线、点、柱的颜色,只需要在相应的函数内加参数 color=‘ xxx’
xxx:为颜色代码
其实现在有很多在线网站就可以直接导入数据画图,不需要使用python也可以直接画图。