说一个有用的,关于Python数据作图,几行代码就可以替代软件作图,有代码!可直接复制修改数据!!!快收!!作者:不会算法的数学小白
来源:CSDN博客
电脑里面下满各式各样的只有做作业才会打开的应用,身为重度强迫症患者的我很是不开心,所以决用python代替pass来进行作图,众所周知,Python具有强大的数据处理功能,对于根据数据来做图肯定是小意思啦;
废话不多说下面直接开始
我们常用的数据图有下面几种:
条形图
饼图
环形图
直方图
茎叶图
箱型图
散点图
雷达图
在本人有限的知识内存当中觉得散点图和轮廓图没什么用处所以就不做介绍。我们开始进入正题
条形图
.用宽度相同的条形来表示数据的多少的图形,用来观察不同类别频数的多少货分布状况
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
weights = np.array([90,60,80,80,100,70,80,90,100,60,
70,100,80,90,80,70,60,80,60,60,
100,70,90,80,80,100,60,70,80,90,
90,100,80,70,60,100,90,70,70,80,
80,90,80,60,70,90,80,80,90,80,
70,100,80,90,80,70,60,80,60,90,
90,60,80,80,100,70,80,90,100,60,
90,100,80,70,60,100,90,70,70,80,
100,70,90,80,80,100,60,70,80,90,
80,90,80,60,70,90,80,80,90,80
])
sections = [50,60,70,80,90,100 ]
group_names = [60,70,80,90,100]
cuts = pd.cut(weights,sections,labels=group_names)
counts = pd.value_counts(cuts)
dict(counts)
cuts.value_counts().plot(kind='bar')
plt.show()
下面是代码运行效果 />
当数据量不大的时候可以考虑手动输入,但数据量巨大是可以尝试从excel当中导入,原理和上面相同。
饼图用圆形及扇形的角度来表示数值大小,主要用来表示一个样本(或总体)中类别的频数占
全部频数的比例,对于研究结构性问题巨有用
import matplotlib.pyplot as plt
labels =['A', 'B', 'C', 'D', 'E']
sizes=[14,21,32,18,15]
colors=['yellow', 'green', 'gold', 'blue', 'lightcoral']
explode =(0,0.1,0,0,0)
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',
shadow=True,startangle=90)
plt.axis('equal')
plt.show()
其中explode当中的0.1是为了将绿色部分突出来,根据自己的需要调节突出来的多少
具体效果 />
环形图和饼图差不多,就是一个饼图里面再套一个饼图。
直方图用来展示定量数据分布的一种常用图形用矩形的宽度和宽度(即面积)来表示频数分布
下面阐述一下直方图和条形图的不同
(1) 条形图中的每一个矩形表示一个类别,其宽度没有意义,而直方图当中宽度表示各组的距距
(2)直方图当中分组的数据具有连续性,条形图则是分开排列的
(3)条形图用来定性数据,而直方图则用来定量展示数据
下面是实现代码通过Excel导入数据
import os
from numpy import array
import numpy as np
import pylab as pl
import pandas as pd
import matplotlib.pyplot as plt
oriPath ="D:/program files/tuxin/demo/data/lightlive.csv"
def get_data(lines):
sizeArray=[]
for line in lines:
line =line.replace(" ","")
line = line.split(",")
if line[-1] == '':
line = line[: -1]
line = [int(i) for i in line]
sizeArray += line
return array(sizeArray)
f=open(oriPath, 'rt')
Lenths =get_data(f.readlines())
def draw_hist(lenths):
data=lenths
print(data.min())
_min = data.min()
_min = _min - (_min%10)
bins=np.linspace(_min,data.max(),10)
bins = [int(i) - (int(i)%10) for i in bins]
print(bins)
pl.hist(data,bins, density=True)
pl.xlabel("Number of xxx")
pl.ylabel("Number of occurences")
pl.title("Frequence distribution of number of lightlive")
pl.show()
draw_hist(Lenths) />
茎叶图茎叶图的思路是将数组中的数按位数进行比较,将数的大小基本不变或变化不大的位作为一个主干(茎),将变化大的位的数作为分枝(叶),列在主干的后面,这样就可以清楚地看到每个主干后面的几个数,每个数具体是多少
茎叶图我们从初中就开始学习和使用了,所以这也是种比较简单的数据图形,因此我就不做介绍,有兴趣的朋友可以去简单的了解一下
箱型图又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的最大值、最小值、中位数和两个四分位数;然后, 连接两个四分位数画出箱子;再将最大值和最小值与箱子相连接,中位数在箱子中间。
个人认为这是一种比较不直观的图形
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_excel('../data/catering_sale.xls',index_col='日期')
plt.rcParams['font.sans-serif']=['SimHei']#正常显示中文
plt.rcParams['axes.unicode_minus']=False#正常显示负号
plt.figure(figsize=(8,8))
p=data.boxplot(return_type='dict')
x=p['fliers'][0].get_xdata()
y=p['fliers'][0].get_ydata()
y.sort()
for i in range(len(x)):
if i>0:
plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.05-0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.8,y[i]))
plt.show() />
雷达图雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。 雷达图也称为网络图,蜘蛛图,星图,星图,蜘蛛网图,不规则多边形,极坐标图或Kiviat图。它相当于平行坐标图,轴径向排列。
这是种我认为神奇的图形,可以综合评定一个各个方面的指标
from pyecharts import Radar
import os
os.getwcd()
schema = [('喜欢我', 100), ('听我话', 100), ('在乎我', 100), ('牵挂我', 100), ('主动找我', 100), ('逗我笑', 100), ('欺负我', 100),
('带我吃', 100), ('带我玩', 100), ('让着我', 100)] # 写指标和最大值
v1 = [[99, 99, 99, 99, 99, 100, 10, 99, 99, 99]] # 写对应指标的实际达到的数值
radar = Radar()
radar.config(schema)
radar.add('和xxx恋爱', v1, is_splitline=True, is_axisline_show=True) # 标题
radar.show_config()
radar.render() />
是不是很有用呢!
如果你觉得有用的话就给我点个赞让更多小伙伴看见把~