pyecharts柱状图的无脑记录

在进行文章写作时,难免会放入一些柱状图,所以学习了pyecharts绘图,以便下次使用

基础柱状图的绘制

1.代码
from pyecharts.charts import Bar # 导入柱状图的使用模块Bar
from pyecharts.options import LabelOpts # 导入label模块


bar=Bar() # 创建一个空的柱状图对象
bar.add_xaxis(['中国','美国','日本']) # 添加x轴所需数据
bar.add_yaxis('GDP',[30,20,10],label_opts=LabelOpts(position='right')) # 添加y轴数据,label_opts中position='right'表示将y轴数据显示在右侧
bar.reversal_axis() # x,y轴位置调换
bar.render() # 生成html,网页显示
2.结果

python如何做双向横向柱状图 pyecharts横向柱状图_信息可视化


如果想要竖着的柱状图,可以将上述代码中的:

bar.reversal_axis()

删去(注释掉),因为该代码就是可以将x轴y轴的数据进行转换,删去的结果为:

python如何做双向横向柱状图 pyecharts横向柱状图_信息可视化_02


可以看到将横的柱状图改为了竖的柱状图,但是label数据却显示在右侧,是因为在横柱状图代码:

bar.add_yaxis('GDP',[30,20,10],label_opts=LabelOpts(position='right'))

中,设置了label_opts=LabelOpts(position=‘right’),即label在右侧显示,可以将position='right'改为``position='top',即可居中显示,结果为:

python如何做双向横向柱状图 pyecharts横向柱状图_信息可视化_03

基础动态柱状图的绘制

1.动态柱状图其实就是以时间作为x轴,不断的显示基础柱状图,和播放PPT机制类似。以上述单个基础柱状图为例,再建立几个基础柱状图,就可以绘制基础动态柱状图

2.代码

from pyecharts.charts import Bar,Timeline # 导入柱状图Bar和时间线
from pyecharts.options import LabelOpts   # 导入label标签
from pyecharts.globals import ThemeType   #导入主题类型
#建立5个基础的柱状图
bar=Bar() 
bar.add_xaxis(['中国','美国','日本'])
bar.add_yaxis('GDP',[30,20,10],label_opts=LabelOpts(position='right'))
bar.reversal_axis()

bar1=Bar()
bar1.add_xaxis(['中国','美国','日本'])
bar1.add_yaxis('GDP',[60,10,130],label_opts=LabelOpts(position='right'))
bar1.reversal_axis()

bar2=Bar()
bar2.add_xaxis(['中国','美国','日本'])
bar2.add_yaxis('GDP',[120,5,40],label_opts=LabelOpts(position='right'))
bar2.reversal_axis()

bar3=Bar()
bar3.add_xaxis(['中国','美国','日本'])
bar3.add_yaxis('GDP',[49,79,63],label_opts=LabelOpts(position='right'))
bar3.reversal_axis()


bar4=Bar()
bar4.add_xaxis(['中国','美国','日本'])
bar4.add_yaxis('GDP',[90,20,83],label_opts=LabelOpts(position='right'))
bar4.reversal_axis()
#建立时间线和主题类型
timeline=Timeline(
    {
        "theme":ThemeType.LIGHT
    }
)
#在时间线中,添加五个基础柱状图
timeline.add(bar,'点0')
timeline.add(bar1,'点1')
timeline.add(bar2,'点2')
timeline.add(bar3,'点3')
timeline.add(bar4,'点4')
设置时间线的状态
timeline.add_schema(
    play_interval=1000,       # 自动播放的时间间隔
    is_timeline_show=True,    # 显示时间线
    is_auto_play=True,        # 自动播放
    is_loop_play=True         # 自动循环播放
)

timeline.render()

3.结果


20230209_212238


高级动态柱状图的绘制

1.使用的数据

python如何做双向横向柱状图 pyecharts横向柱状图_python如何做双向横向柱状图_04


数据中的内容使用记事本打开,内容为:

python如何做双向横向柱状图 pyecharts横向柱状图_数据分析_05


读取XLS.csv格式的数据,此处不能用UTF-8,而是ANSI,代码:

f=open(r'C:\Users\Administrator\Desktop\1\1960-2019全球GDP数据.csv','r',encoding='ANSI')

然后使用readlines()函数将读取到的数据转换为列表,每一行为一个元素:

ff=f.readlines()

然后,使用pop()函数,删除第一行的year,GDP,rate,在转换为列表中,‘year,GDP,rate’为列表第一个元素:

ff.pop(0)

for循环得到year,country,data数据

for line in ff:
    year=int(line.split(',')[0])
    country=line.split(',')[1]
    data=float(line.split(',')[2])
    try:
        a[year].append([country,data])
    except KeyError:
        a[year]=[]
        a[year].append([country, data])

建立时间线和循环,进行整个动态绘制:

tt=Timeline(
    {
       "theme":ThemeType.LIGHT
    }
)
aa=sorted(a.keys())

for i in aa:
     a[i].sort(key=lambda ii: ii[1],reverse=True)
     ss=a[i][0:8]
     xx=[]
     yy=[]
     for iii in ss:
         xx.append(iii[0])
         yy.append(iii[1]/100000000)
     bar=Bar()
     xx.reverse()
     yy.reverse()
     bar.add_xaxis(xx)
     bar.add_yaxis('GDP亿',yy,label_opts=LabelOpts(position="right"))
     bar.reversal_axis()
     bar.set_global_opts(
         title_opts=TitleOpts(title=('%d年全球前八个国家的GDP对比情况'%i))
     )
     tt.add(bar,str(aa))
tt.add_schema(
         play_interval=1000,  # 自动播放的时间间隔
         is_timeline_show=True,  # 显示时间线
         is_auto_play=True,  # 自动播放
         is_loop_play=True  # 自动循环播放
     )
tt.render()

完整代码

from pyecharts.charts import Bar,Timeline
from pyecharts.options import  LabelOpts,TitleOpts
from pyecharts.globals import ThemeType
f=open(r'C:\Users\Administrator\Desktop\1\1960-2019全球GDP数据.csv','r',encoding='ANSI')
ff=f.readlines()
f.close()
ff.pop(0)
a={}
for line in ff:
    year=int(line.split(',')[0])
    country=line.split(',')[1]
    data=float(line.split(',')[2])
    try:
        a[year].append([country,data])
    except KeyError:
        a[year]=[]
        a[year].append([country, data])
tt=Timeline(
    {
       "theme":ThemeType.LIGHT
    }
)
aa=sorted(a.keys())

for i in aa:
     a[i].sort(key=lambda ii: ii[1],reverse=True)
     ss=a[i][0:8]
     xx=[]
     yy=[]
     for iii in ss:
         xx.append(iii[0])
         yy.append(iii[1]/100000000)
     bar=Bar()
     xx.reverse()
     yy.reverse()
     bar.add_xaxis(xx)
     bar.add_yaxis('GDP亿',yy,label_opts=LabelOpts(position="right"))
     bar.reversal_axis()
     bar.set_global_opts(
         title_opts=TitleOpts(title=('%d年全球前八个国家的GDP对比情况'%i))
     )
     tt.add(bar,str(aa))
tt.add_schema(
         play_interval=1000,  # 自动播放的时间间隔
         is_timeline_show=True,  # 显示时间线
         is_auto_play=True,  # 自动播放
         is_loop_play=True  # 自动循环播放
     )
tt.render()

结果


20230209_221214