(美国大学生数学建模竞赛,简称美赛。一共五个奖项,分别为O,F,M,H,S奖。 在国内,约定俗成地将这五个奖项分别对应为特等奖、特等奖候选奖、一等奖、二等奖,成功参与奖,所以在保研同学的心目中,这个比赛还是很有分量的。)
美赛粗略地计算一共三天。第一天我们一直在审题、选题、换题、审题、选题......反正会做的就那么几个,还好整个队伍的心理抗压能力很好,不然第一天就结束了。
第二天开始处理数据,然后交给我们队的大佬跑结果。第三天写论文,英语大佬满血通宵。最后获得了一般的成绩,H奖。
对!没错!看到这里,你会发现我就做了一件事,处理数据!处理数据!!处理数据!!!
嗯~o(* ̄▽ ̄*)o......我反省,我认错,我对不起那奋战一夜的队友。
正文开始:
pyecharts——python数据可视化模块
先给出效果图,很开心呀^_^。网址:pyecharts - A Python Echarts Plotting Library
例子—条形图
首先,团队在写论文的过程中需要从时间上给出规律,这时给出一张条形图岂不是会加分嘛~
为了能够将数据及时取出并方便管理,采用excel从里面读出数据,所以程序要先读表。
data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
然后就用到了pyecharts,敲黑板!!!
bar = Bar("TX",title_text_size=30)
bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],
xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)
这么多参数,一下子想问候我?别急,咱们慢慢来。
首先实例化Bar这个类,也就是柱形图/条形图。
Bar("TX",title_text_size=30) //“TX”为标题(title),title_text_size为主标题字体大小(int类型)
还有很多参数(副标题、标题距离顶部距离、背景颜色、文本颜色等,参考链接:pyecharts - A Python Echarts Plotting Library
我们接着看下一行。
bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],
xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)
add()函数,在给出的链接中叫做通用配置项(虽然不知道为啥叫这个)。
name列表是自己定义的,对应的是图例。
time也是自己写的,对应的是横坐标的数据。
cols_ 是之前从表格里读出来的,对应的是纵坐标的数据。
bar_category_gap调整的是柱形间距。
mark_line、mark_point使得想要的内容显示出来。
xaxis_interval调整的是横坐标的标度。
xaxis_rotate调整刻度标签旋转的角度。
legend_text_size调整的是图例文本大小。
大佬的教程里面显示要先有show_config(),然后render()结束。可能是我的粗心,应用中我只用了render(),还需要大佬指点,文章最后会贴上所有代码,程序运行完,会生成一个render.html文件,图就在里面,需要请自行下载。
一个超级简单的效果图就出现啦!
还在用饼图展示结果?NO!玫瑰图
个人感觉是个很神奇的存在...玫瑰图...\(^o^)/~
超喜欢的文章链接:Python 数据可视化? - 简书 大佬的脑袋个人很想拿去上解剖课
首先,继续从表格里面读数据,然后开始我们的求学之路。
data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
cols_ = table.col_values(i)
pie = Pie("TX", title_pos='left', width=900,title_text_size=40)
#pie.add("商品A", attr, v1, center=[25, 50], is_random=False, radius=[30, 75], rosetype='radius')
pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',
is_legend_show=False, is_label_show=True,label_text_size=28)
别急别急,慢慢学。
Pie与Bar相同,都是一个对象(我瞎说的),首先实例化对象:
pie = Pie("TX", title_pos='left', width=900,title_text_size=40)
"TX"为标题(title),title_pos调整标题位置,title_text_size调整主标题文字大小,其余的,根据自己需求来调整。
pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',
is_legend_show=False, is_label_show=True,label_text_size=28)
add()函数,通用配置项,不知道大家记住没有 ,“商品B”大家自行忽略......
后面的is_legend_show将图例设为不显示了 name为不同的属性名称,在这里为:oil、gas、coal、clean energy
cols为从表格读出来的,不同属性对用的数据 center为调整饼图圆心坐标
is_random为是否随即排列颜色列表(bool)
radius为半径,第一个为内半径,第二个是外半径
rosetype为是否展示成南丁格尔图
'radius' 圆心角展现数据半分比,半径展现数据大小
'area' 圆心角相同,为通过半径展现数据大小
is_label_show为是否显示标签(各个属性的数据信息) label_text_size为调整标签字体大小。
这样,一个高大上的玫瑰图就弄好了。
我是代码——我是代码——我是代码
//这是条形图哒
import xlrd
import matplotlib.pyplot as plt
from pyecharts import Bar
data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
name = ['Oil','Natural Gas','Coal','Clean Energy']
time = []
for j in range(1960,2010):
time.append(j)
i = 0
num = i + 221
#plt.subplot(num)
cols_ = table.col_values(i)
bar = Bar("TX",title_text_size=30)
bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],
xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)
#bar.add("商家B", time, v2, mark_line=["min", "max"])
bar.render()
//这里是玫瑰图的代码
from pyecharts import Pie
import xlrd
i = 3
data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
cols_ = table.col_values(i)
print(len(cols_))
name = ['Oil','Natural Gas','Coal','Clean Energy']
states = ['AZ','CA','NM','TX']
#v1 = [11, 12, 13, 10, 10, 10]
#v2 = [19, 21, 32, 20, 20, 33]
pie = Pie("TX", title_pos='left', width=900,title_text_size=40)
pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',
is_legend_show=False, is_label_show=True,label_text_size=28)
pie.show_config()
pie.render()