python数据可视化

python数据可视化

由于毕业设计需要将实验数据可视化,这篇文章主要是记录利用python进行数据可视化方式,包括散点图,折线图,柱状图。后续工作会对其他的绘图方式进行补充。

1. 散点图

散点图比较适合查看离散数据的分布情况。一下是我绘制散点图的代码

import numpy as np
import matplotlib.pyplot as plt

x1=[39,72,76,28,112,100,100,54,74,64,28,121,91,106,82,49,41,44,55,56,27,111,22,33,42,67,44,44,69,101,47,115,31,135,54,57,49,55,33,43,40,116,144,119,41,33,111,59,83,136,84,33,68,38,102,125,161,107,52,38,70,66,82,33,62,76,27,36,74,102,60,47,123,24,43,25,110,57,118,54,170,110,109,133,113,65,54,98,37,72,65,66,59,30,145,118,48,119,31,28]
x2=[31,113,35,81,23,33,35,91,75,48,35,32,60,56,112,60,54,60,33,40,105,64,53,29,80,79,59,93,35,69,51,97,36,108,35,118,95,38,89,28,40,26,107,91,80,41,16,91,41,27,24,30,108,40,63,34,22,41,31,31,96,29,45,46,45,37,59,88,25,77,45,39,31,53,25,58,32,116,40,83,41,46,56,47,35,54,53,34,44,86,72,55,40,123,32,43,27,51,25,39]
y1=[0.8011831734997076,0.8027029491199094,0.8062975940745305,0.8077850670418107,0.8065827022611172,0.8066186944108588,0.8065827022611172,0.7935392957748717,0.8066186944108588,0.8071780330290976,0.8078869903185585,0.8065827022611172,0.807321041699993,0.8065827022611172,0.8071248870709088,0.8030400506791933,0.803050584637219,0.8071248870709088,0.8065431070718279,0.8030026553202678,0.8072190484914114,0.8065827022611172,0.8066900087401476,0.8065708587082733,0.8078507070260799,0.8020524013404647,0.8011966139971646,0.8030296646496343,0.8071188105135707,0.8066186944108588,0.8073482374295623,0.8062975940745305,0.8071516559465062,0.8011831734997076,0.8020524013404647,0.8066462467578258,0.8087169467767833,0.8078121667678233,0.8025856516597978,0.8071780330290976,0.8067562079427675,0.8065827022611172,0.8065827022611172,0.8011831734997076,0.8077226212107996,0.8085681130272375,0.8065827022611172,0.8035637271584115,0.8071780330290976,0.8066186944108588,0.8071780330290976,0.8020415959950649,0.8030337296365786,0.8086837334607899,0.8065827022611172,0.8066186944108588,0.8071780330290976,0.8065827022611172,0.8066304922174721,0.8062059430935005,0.8030458398808598,0.8071780330290976,0.8071248870709088,0.8065628067733147,0.8071248870709088,0.8064809878167377,0.8064636772685552,0.8062985365022614,0.8062999036602677,0.8065797424354546,0.8030304872755584,0.8030305369709326,0.8065827022611172,0.8048197283841918,0.8030401003745675,0.8074057112106021,0.8065827022611172,0.8085613294228169,0.8066186944108588,0.8071188105135707,0.8062975940745305,0.8065827022611172,0.8065062452370113,0.8065827022611172,0.8071780330290976,0.8071188105135707,0.8029463134989113,0.8071188105135707,0.8068976398921301,0.8067562079427675,0.7932695670397767,0.8071780330290976,0.8020524013404647,0.8066362455601632,0.8071780330290976,0.8071780330290976,0.8071780330290976,0.8065827022611172,0.8086605029199003,0.806337059409451]
y2=[0.808711621149241,0.8065827022611172,0.8029823921094238,0.8064809878167377,0.8070773405920333,0.8085656269007965,0.8077926825310692,0.8071780330290976,0.8071780330290976,0.8035790050700599,0.8073531790339372,0.8073542720346966,0.8065516553138677,0.8079134479709467,0.8065827022611172,0.8071780330290976,0.8087169467767833,0.8073482374295623,0.8029828770930307,0.8087169467767833,0.8065827022611172,0.8078121667678233,0.8073482374295623,0.8074244479247764,0.8065827022611172,0.8077876193693754,0.8078740569559044,0.807321041699993,0.807379098629566,0.8064809878167377,0.8087169467767833,0.8071780330290976,0.8085810493731149,0.8065827022611172,0.8086823821660493,0.8065827022611172,0.8066186944108588,0.8078291712517421,0.8065827022611172,0.8073983281098295,0.8074199708926757,0.8078395614092431,0.8071780330290976,0.8065827022611172,0.807321041699993,0.8073601420157095,0.8086006304313088,0.8073482374295623,0.8087502234194305,0.8086056888933546,0.8035637271584115,0.8086481828012474,0.8071748004356005,0.8070161019780291,0.8085584872729932,0.8086250298677419,0.8086734759043355,0.8086742485564951,0.8066547747131153,0.801159521621944,0.8065827022611172,0.8020524013404647,0.8087169467767833,0.8078121667678233,0.8067691585287537,0.8074037382730791,0.8071780330290976,0.8071780330290976,0.8073629665767594,0.8064809878167377,0.8071543500727348,0.8030401003745675,0.8074009032756697,0.8086009622518537,0.8029354956279796,0.8062975940745305,0.8065755932358578,0.8071780330290976,0.8071830887312785,0.8078121667678233,0.8079242121516022,0.8078291712517421,0.8078121667678233,0.8078121667678233,0.8075654484096428,0.8073468010864361,0.8082073746517162,0.8087169467767833,0.8065974698964672,0.8087253055709791,0.8030083920837546,0.8086929139601361,0.8071824409837299,0.8062975940745305,0.8071817147097315,0.8073562303905086,0.804364311027493,0.8073482374295623,0.8078504186546982,0.807864904385224]
#这里是数据转换一下,不必在意
y2=[i*100 for i in y2]
y1=[i*100 for i in y1]
x1=np.array(x1)
x2=np.array(x2)
y1=np.array(y1)
y2=np.array(y2)
meanx1=np.mean(x1)
meanx2=np.mean(x2)
meany1=np.mean(y1)
meany2=np.mean(y2)
#一下是为了让画出的图片可以显示汉字
# matplotlib画图中中文显示会有问题,需要这两行设置默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#设置x,y的标注
plt.xlabel('迭代次数',fontsize=16)#后面参数设置大小,同时可以利用fontweight='bold'设置字体
plt.ylabel('聚类精度 / %',fontsize=16)
#设置x,y的显示范围
plt.xlim(xmax=200, xmin=0)
plt.ylim(ymax=81, ymin=79)

colors1 = '#00CED1'  # 点的颜色
colors2 = '#DC143C'
area = np.pi * 3.5 ** 2  # 点面积
# 画散点图
plt.scatter(x1, y1, s=area, c=colors1, alpha=0.4, label='kmean')
plt.scatter(x2, y2, s=area, c=colors2, alpha=0.4, label='kmean++')
plt.scatter(meanx1, meany1, s=3*area ,c='gold', marker='*',alpha=1, label='kmean average')
plt.scatter(meanx2, meany2, s=3*area, c='purple',marker='*', alpha=1, label='kmean++ average')
plt.plot([0, 9.5], [9.5, 0], linewidth='0.5', color='#000000')
plt.legend()
#plt.savefig(r'C:\Users\jichao\Desktop\大论文\12345svm.png', dpi=300)#这个语句用来保存图片,可以根据实际情况修改地址
plt.show()#显示图片呢

显示结果如下
图1,散点图示意图

图1.1 散点图效果图

以下是针对上述代码进行的一个补充说明,使用时可以根据实际需要对上述代码进行更改获得想要的效果

1.1 plt.scatter()参数

plt.scatter()参数如下

matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, 
	vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs)

其中

参数意义
x, y相同长度的数组序列x,y:形如shape(n,)数组,表示输入数据
s标量或形如 shape(n,]数组,表示散点的面积,默认20
c即散点颜色,可选,注意C不应是一个单一的RGB数字或RGBA序列,因为不便区分。C可以是一个RGB或RGBA二维行数组。具体的颜色选择可以查阅 图1.2
marker散点的形状,可选,默认为圆点‘o’,其他散点形状设置可以看图1.3
cmap颜色渐变方式,可以参考文章: link.
norm亮度参数,float数据,0-1之间
vmin,vmax亮度参数,当norm参数实例化时,这两个参数无效
alpha透明度参数,float数据,0-1之间
linewidths标量或者数组,表示散点的边框粗细参数

1.2 颜色及marker查询表

在这里插入图片描述

图1.2 颜色查找图

在这里插入图片描述

图1.3 marker查找图

2. 折线图

折线图适合用来查看数据的表化趋势。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#如果要显示中文字体,则在此处设为:SimHei
plt.rcParams['axes.unicode_minus']=False#显示负号

x = np.arange(100)
C=np.array([0.10119091697540847, 0.3638652210011425, 0.5337550620176696, 0.620433019052609, 0.4544986431284367, 0.5286184609345039, 0.6345424341568084, 0.674706767444729, 0.7149237652985996, 0.7514203410752891, 0.7601123439240202, 0.5848930173881723, 0.663492195469425, 0.6365592165093311, 0.6858801096748822, 0.7289689575486304, 0.7213676163248484, 0.7567781898734147, 0.779645024697215, 0.7791254270865131, 0.800001569295779, 0.8074353549977596, 0.8188068077289934, 0.8168137074889058, 0.8136383871882865, 0.7415301915868966, 0.7462830933479807, 0.7257115985244005, 0.7622806397117422, 0.750701102657218, 0.78552429232499, 0.7847318154522287, 0.7943357530499273, 0.7916342522775632, 0.7935395503891524, 0.7971663938143244, 0.8104035091073207, 0.8062735711069664, 0.7989045852511583, 0.8199770919436393, 0.8181821094807153, 0.8331067822492446, 0.8373788645884263, 0.8240424387352119, 0.8350793251301658, 0.8366560628068388, 0.8438079900444493, 0.8457463798203827, 0.8452282355189535, 0.843008203168494])
F=np.array([0.10573393375639537, 0.1708660330080185, 0.21783537710057227, 0.2766336601681507, 0.33926034437639896, 0.3601823145874349, 0.4137606367059248, 0.4795162306201126, 0.4067068161204297, 0.47637770017333503, 0.522577221817104, 0.5419077667680854, 0.5356261287358532, 0.5702457184541331, 0.5560647956800124, 0.5265482609427463, 0.5602762590601361, 0.5743632606730736, 0.6087142743510114, 0.5899567475887875, 0.645408477868823, 0.6325681319666716, 0.6210778875718466, 0.6513183605285426, 0.6564890277235972, 0.6505454646974059, 0.628274708967079, 0.6685106815059152, 0.6208411599887589, 0.6881364497310529, 0.6513499530790601, 0.7218550378449662, 0.6933146060274793, 0.7020159793560812, 0.679454749467529, 0.696661636382298, 0.6831290377833449, 0.67434949373622, 0.7083214359898031, 0.7192186010790523, 0.7101004191210641, 0.7353759252851864, 0.7558428194665461, 0.742351153348104, 0.7444064330297924, 0.7393998020616651, 0.7349655478172914, 0.7382793775127565, 0.7432981694913774, 0.7691671159410914, 0.7646404647529359, 0.7670767186042581, 0.7693887308202454, 0.7865650203674447, 0.7716143435040487, 0.7594502056977065, 0.7969929947933053, 0.7776946708479788, 0.7890015237238945, 0.7897553786902232, 0.7952840926762971, 0.8023618569364533, 0.8026813517459453, 0.807575033006296, 0.8072694262607254, 0.7949893835466029, 0.8001199245881002, 0.7992450308929049, 0.8065951527367965, 0.7972825869541037, 0.8146007967192356, 0.8151045003237858, 0.8053700570653648, 0.8165465571390792, 0.8331388152027035, 0.8139256855105396, 0.8105781443731107, 0.8212647052649189, 0.8130121775750739, 0.8126754875883346, 0.824351383650292, 0.8154867033378499, 0.8236270277242037, 0.8155936725106772, 0.8031185531002839, 0.8089215685513358, 0.8172535652608642, 0.822738481331555, 0.8283203476472949, 0.8209130253999121, 0.819155158683753, 0.8212382655209758, 0.8173757786263284, 0.8264562824674069, 0.8273486169859041, 0.8224879660254721, 0.823689837322054, 0.8239559143634875, 0.8315861186058211, 0.8234033712818383])

#label在图示(legend)中显示。若为数学公式,则最好在字符串前后添加"$"符号
#color:b:blue、g:green、r:red、c:cyan、m:magenta、y:yellow、k:black、w:white、、、
#线型:-  --   -.  :    ,
#marker:.  ,   o   v    <    *    +    1
plt.figure(figsize=(10,5.5))
plt.grid(linestyle = "--") #设置背景网格线为虚线
ax = plt.gca()
ax.spines['top'].set_visible(False) #去掉上边框
ax.spines['right'].set_visible(False) #去掉右边框

plt.plot(range(1,101,2),C[:50],linestyle="-",color="orange",marker='s',label="改进后模型",linewidth=1.5)
plt.plot(range(1,101,2),F[:50],color='green',linestyle="--",marker='x',label="原模型",linewidth=1.5)


plt.xticks([1,10,20,30,40,50,60,70,80,90,100],fontsize=16,fontweight='bold') #默认字体大小为10
plt.yticks(fontsize=16,fontweight='bold')
#plt.title("不同学习率衰减方式的损失曲线",fontsize=12,fontweight='bold') #默认字体大小为12
plt.xlabel("训练次数",fontsize=18,fontweight='bold')
plt.ylabel("mAP",fontsize=20,fontweight='bold')#准确率 Accuray / %

plt.xlim(-1,100) #x设置x轴的范围
plt.ylim(0,1)
#plt.title('不同学习率衰减方式下的loss曲线')
#plt.legend()          #显示各曲线的图例

plt.legend(loc=0, numpoints=1,bbox_to_anchor=(1,0.5))#设置图例位置
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=16,fontweight='bold') #设置图例字体的大小和粗细

#plt.savefig('D:\\filename.png') #建议保存为svg格式,再用inkscape转为矢量图emf后插入word中
plt.show()

效果如下
在这里插入图片描述

图2.1 折线图效果图
关于颜色及marker的设置也可以参考上面的图1.2,1.3. ### 2.1 plt.legend()参数 通过 plt.legend的参数可以设置图例的大小,位置,形状 等等,参数及其意义如下
参数意义
loc图例的位置,可以取可取(‘best’, ‘upper right’, ‘upper left’, ‘lower left’, ‘lower right’, ‘right’, ‘center left’, ‘center , right’, ‘lower center’, ‘upper center’, ‘center’) ;若是使用了bbox_to_anchor,则这项就无效了
fontsizeint或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},字体大小
frameon是否显示图例边框,True或者False
ncol图例的列的数量,默认为1
title为图例添加标题
shadow是否为图例边框添加阴影
markerfirstTrue表示图例标签在句柄右侧,false反之
markerscale图例标记为原图标记中的多少倍大小
numpoints表示图例中的句柄上的标记点的个数,一般设为1
fancybox是否将图例框的边角设为圆形
framealpha控制图例框的透明度
borderpad图例框内边距
labelspacing图例中条目之间的距离
handlelength图例句柄的长度
bbox_to_anchor(横向看右,纵向看下),如果要自定义图例位置或者将图例画在坐标外边,用它,比如bbox_to_anchor=(1.4,0.8),这个一般配合着ax.get_position(),set_position([box.x0, box.y0, box.width*0.8 , box.height])使用。用不到的参数可以直接去掉,有的参数没写进去,用得到的话加进去 , bbox_to_anchor=(1.11,0)

注意:如果使用ax.legend的话,需在它之前加一句:

ax = plt.gca()#返回坐标轴

2.2 fontweight设置字体粗细

font-weight可取值:100~900和normal、bold、bolder、lighter等,即可以使用数值和关键字设置字体的粗细。其对应关系如下
100 - Thin
200 - Extra Light (Ultra Light)
300 - Light
400 - Regular (Normal、Book、Roman)
500 - Medium
600 - Semi Bold (Demi Bold)
700 - Bold
800 - Extra Bold (Ultra Bold)
900 - Black (Heavy)

2.3 plt.plot()参数

x,y自然就是点的x坐标和y坐标
通过linewidth这个参数可以设置折线的样式,一般的linestyle设置如下:
‘-’ solid line style 实线样式
‘–’ dashed line style 虚线样式
‘-.’ dash-dot line style 虚点线样式
‘:’ dotted line style 冒号样式
也可以设置(offset, onoffseq)参数,该参数的使用方式为

linestyle=(10,(55,20))

其中10表示开始绘制的点,50表示线段长度,220表示线段的间隔。通过设置这些参数可以获得自己想要的折线类型。
同时可以利用参数linewidth设置折线的线宽
通过color设置折线颜色
通过marker设置标记点类型
通过markerfacecolor设置标记点颜色
通过markersize设置标记点大小

3. 柱状图

柱状图适合直观地对比各组数据的情况

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#如果要显示中文字体,则在此处设为:SimHei
plt.rcParams['axes.unicode_minus']=False#显示负号



plt.figure(figsize=(10,5))
ccc=np.array([0.86,0.89,0.83,0.84,0.87,0.80,0.83,0.85,0.90,0.81])
ddd=np.array([0.88,0.93,0.84,0.87,0.87,0.80,0.83,0.84,0.89,0.80])
classes = ('晚疫病','红蜘蛛损伤','斑点病','黄化曲叶病','班枯病','健康番茄','疮痂病', '早疫病', '叶霉病', '花叶病')


bar_width = 0.3  # 条形宽度
index_1 = np.arange(len(classes))  # 条形图1的横坐标
index_2= index_male + bar_width  # 条形图2的横坐标

# 使用两次 bar 函数画出两组条形图

res=plt.bar(index_1, height=ccc, width=bar_width, color='green', label='误差平方和损失函数')
res2=plt.bar(index_2, height=ddd, width=bar_width, color='orange', label='CIOU损失函数')

#显示具体的数值
for rect in res:  
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height, str(height), size=10, ha='right', va='bottom',fontweight='bold',color='green')
i=0
for rect in res2:  
    height = rect.get_height()
    i+=1
    if i<8:
        plt.text(rect.get_x() + rect.get_width() / 2, height, str(height), size=10, ha='center', va='bottom',fontweight='bold',color='orange')
    else:
        plt.text(rect.get_x() + rect.get_width() / 2, height, str(height), size=10, ha='left', va='bottom',fontweight='bold',color='orange')


plt.legend()  # 显示图例
plt.ylim(0.5,1)
plt.xticks(index_1 + bar_width/2, classes ,fontsize=11,fontweight='bold')  # 让横坐标轴刻度显示 病虫害种类, index_male + bar_width/2 为横坐标轴刻度的位置
plt.ylabel('AP',fontsize=18,fontweight='bold')  # 纵坐标轴标题
plt.title('不同损失函数结果对比',fontsize=13,fontweight='bold')  # 图形标题

plt.legend(loc=0, numpoints=1)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=12,fontweight='bold') #设置图例字体的大小和粗细

#plt.savefig('D:\\filename.png') #建议保存为svg格式,再用inkscape转为矢量图emf后插入word中
plt.show()

效果图
在这里插入图片描述

图3.1 柱状图效果图

3.1 plt.bar()参数

参数意义
x类型:int或者float,指的是柱状图的x坐标列表
height类型:int或者float,指的是柱子的高度值的列表
width0-1,指的是柱子的宽度
bottom柱状图y轴的起始位置
align柱子对齐方式:center和edge。center表示每根柱子中心对准下标, edge则表示每根柱子右边对准下标。默认值是center
color每根柱子呈现的颜色
edgecolor每根柱子边框的颜色
linewidth每根柱子的边框宽度
tick_label每根柱子上显示的标签,默认是没有内容
xerr每根柱子顶部在横轴方向的线段
yerr每根柱子顶端在纵轴方向的线段
ecolor设置 xerr 和 yerr 的线段的颜色
logy轴使用科学计算法表示,bool值
capsize对xerr或者yerr的补充说明。一般为其设置一个整数,例如 10。如果你已经设置了yerr 参数,那么设置 capsize 参数,会在每跟柱子顶部线段上面的首尾部分增加两条垂直原来线段的线段。对 xerr 参数也是同样道理
error_kw设置 xerr 和 yerr 参数显示线段的参数,它是个字典类型。如果你在该参数中又重新定义了 ecolor 和 capsize,那么显示效果以这个为准。
orientation设置柱子是显示方式。设置值为 vertical ,那么显示为柱形图。如果设置为 horizontal 条形图。不过 matplotlib 官网不建议直接使用这个来绘制条形图,使用barh来绘制条形图。

3.2 plt.text()参数

plt.text()用来在柱状图上编写文字(数字)注释,当然也可以在其他地方,如折线图,散点图使用,其参数如下

参数意义
x,y内容的坐标位置
s显示的内容
fontdict一个定义s格式的dict
fontsize字体大小
colorstr or tuple, 设置字体颜色 ,单个字符候选项{‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’},也可以’black’,'red’等,tuple时用[0,1]之间的浮点型数据,RGB或者RGBA, 如: (0.1, 0.2, 0.5)、(0.1, 0.2, 0.5, 0.3)等
backgroundcolor字体背景颜色
ha设置垂直对齐方式,可选参数:left,right,center
va设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
rotation旋转角度,可选参数为:vertical,horizontal 也可以为数字
alpha透明度,参数值0至1之间

以上

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值