精华内容
下载资源
问答
  • 我们经常看到的Bar Chart Race(柱形竞赛),可以看到数据的呈现非常的直观。今天就一起来学习下如何生成和上面一样的柱形竞赛。1、导入Python库Python12345importpandasaspdimportmatplotlib....

    我们经常看到的Bar Chart Race(柱形竞赛图),可以看到数据的呈现非常的直观。今天就一起来学习下如何生成和上面一样的柱形竞赛图。

    Bar-Chart-Race.gif

    1、导入Python库

    Python

    1

    2

    3

    4

    5importpandasaspd

    importmatplotlib.pyplotasplt

    importmatplotlib.tickerasticker

    importmatplotlib.animationasanimation

    fromIPython.displayimportHTML

    2、加载数据集

    这里使用的是城市人口数据集,加载我们想要的数据:其中,name为城市名称,group为城市所在区域。

    Python

    1

    2df=pd.read_csv("data/city_populations.csv",usecols=['name','group','year','value'])

    df.head()

    df.png

    3、初步处理数据

    提取某一年的TOP10城市:

    Python

    1

    2current_year=2018

    dff=df[df['year'].eq(current_year)].sort_values(by='value',ascending=True).head(10)

    dff.png

    4、 绘制基础柱状图

    Python

    1

    2fig,ax=plt.subplots(figsize=(15,8))

    ax.barh(dff['name'],dff['value'])

    barh.png

    5、 调整样式(设置颜色、添加标签)重新绘制图片

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16colors=dict(zip(

    ["India","Europe","Asia","Latin America","Middle East","North America","Africa"],

    ["#adb0ff","#ffb3ff","#90d595","#e48381","#aafbff","#f7bb5f","#eafb50"]

    ))

    group_lk=df.set_index('name')['group'].to_dict()

    fig,ax=plt.subplots(figsize=(15,8))

    # pass colors values to `color=`

    ax.barh(dff['name'],dff['value'],color=[colors[group_lk[x]]forxindff['name']])

    # iterate over the values to plot labels and values (Tokyo, Asia, 38194.2)

    fori,(value,name)inenumerate(zip(dff['value'],dff['name'])):

    ax.text(value,i,name,ha='right')# Tokyo: name

    ax.text(value,i-.25,group_lk[name],ha='right')# Asia: group name

    ax.text(value,i,value,ha='left')# 38194.2: value

    # Add year right middle portion of canvas

    ax.text(1,0.4,current_year,transform=ax.transAxes,size=46,ha='right')

    bar-2018.png

    6、 完善代码,将代码整合进函数

    优化内容:文字:更新字体大小,颜色,方向

    轴:将X轴移到顶部,添加颜色和字幕

    网格:在条后面添加线

    格式:逗号分隔的值和坐标轴

    添加标题,字幕,装订线空间

    删除:框框,y轴标签

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28fig,ax=plt.subplots(figsize=(15,8))

    defdraw_barchart(year):

    dff=df[df['year'].eq(year)].sort_values(by='value',ascending=True).tail(10)

    ax.clear()

    ax.barh(dff['name'],dff['value'],color=[colors[group_lk[x]]forxindff['name']])

    dx=dff['value'].max()/200

    fori,(value,name)inenumerate(zip(dff['value'],dff['name'])):

    ax.text(value-dx,i,name,size=14,weight=600,ha='right',va='bottom')

    ax.text(value-dx,i-.25,group_lk[name],size=10,color='#444444',ha='right',va='baseline')

    ax.text(value+dx,i,f'{value:,.0f}',size=14,ha='left',va='center')

    # ... polished styles

    ax.text(1,0.4,year,transform=ax.transAxes,color='#777777',size=46,ha='right',weight=800)

    ax.text(0,1.06,'Population (thousands)',transform=ax.transAxes,size=12,color='#777777')

    ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))

    ax.xaxis.set_ticks_position('top')

    ax.tick_params(axis='x',colors='#777777',labelsize=12)

    ax.set_yticks([])

    ax.margins(0,0.01)

    ax.grid(which='major',axis='x',linestyle='-')

    ax.set_axisbelow(True)

    ax.text(0,1.12,'The most populous cities in the world from 1500 to 2018',

    transform=ax.transAxes,size=24,weight=600,ha='left')

    ax.text(1,0,'by @pratapvardhan; credit @jburnmurdoch',transform=ax.transAxes,ha='right',

    color='#777777',bbox=dict(facecolor='white',alpha=0.8,edgecolor='white'))

    plt.box(False)

    draw_barchart(2018)

    bar-new.png

    7、 绘制动态柱状图

    为了看起来像是在竞赛,我们使用matplotlib.animation中的FuncAnimation来重复调用上面的函数在画布上制作动画。frames参数为函数接受的值。

    Python

    1

    2

    3

    4

    5

    6importmatplotlib.animationasanimation

    fromIPython.displayimportHTML

    fig,ax=plt.subplots(figsize=(15,8))

    animator=animation.FuncAnimation(fig,draw_barchart,frames=range(1968,2019))

    HTML(animator.to_jshtml())

    # or use animator.to_html5_video() or animator.save()

    8、 额外奖励,绘制xkcd风格的图形

    Python

    1

    2

    3withplt.xkcd():

    fig,ax=plt.subplots(figsize=(15,8))

    draw_barchart(2018)

    xkcd.png

    matplotlib 的 animations使用说明

    Matplotlib中动画实现的原理跟其它一样,就是让多幅图连续播放,每一幅图叫做一帧(frame)。

    生成动画的核心语句如下:

    Python

    1

    2

    3

    4

    5

    6importmatplotlib.animationasanimation

    fromIPython.displayimportHTML

    fig,ax=plt.subplots(figsize=(15,8))

    animator=animation.FuncAnimation(fig,draw_barchart,frames=range(1968,2019))

    HTML(animator.to_jshtml())

    # or use animator.to_html5_video() or animator.save()

    Python

    1classmatplotlib.animation.FuncAnimation(fig,func,frames=None,init_func=None,fargs=None,save_count=None,*,cache_frame_data=True,**kwargs)

    参数说明:fig:进行动画绘制的figure

    func:更新函数

    frames:传入更新函数的迭代值,即生成每一帧(frame)的参数

    init_func:初始函数

    fargs:传入更新函数的额外参数

    save_count:指定保存动画(gif或mp4)的帧数

    interval:指定帧间隔时间,单位是ms

    repeat_delay:如果指定了循环动画,则设置每次循环的间隔时间

    repeat:指定是否循环动画

    blit:是否优化绘图

    cache_frame_data:控制是否缓存帧数据

    核心方法说明:save(self, filename[, writer, fps, dpi, …]):将动画保存为文件(gif或mp4).

    to_html5_video(self[, embed_limit]):将动画HTML5动画

    to_jshtml(self[, fps, embed_frames, …]):将动画返回为HTML格式

    微信支付

    reward_1516254736-200x200.jpg

    支付宝

    reward_1516254736_1-200x200.jpg

    展开全文
  • 本文主要讲解如何使用python绘制三维的柱形,如下图源代码如下:1234567891011121314151617181920212223242526272829import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3dimport Axes3D#...

    本文主要讲解如何使用python绘制三维的柱形图,如下图

    1-20091F00308.png

    源代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    import numpy as np

    import matplotlib.pyplot as plt

    from mpl_toolkits.mplot3dimport Axes3D

    #构造需要显示的值

    X=np.arange(0,5, step=1)#X轴的坐标

    Y=np.arange(0,9, step=1)#Y轴的坐标

    #设置每一个(X,Y)坐标所对应的Z轴的值,在这边Z(X,Y)=X+Y

    Z=np.zeros(shape=(5,9))

    for iin range(5):

    for jin range(9):

    Z[i, j]=i+j

    xx, yy=np.meshgrid(X, Y)#网格化坐标

    X, Y=xx.ravel(), yy.ravel()#矩阵扁平化

    bottom=np.zeros_like(X)#设置柱状图的底端位值

    Z=Z.ravel()#扁平化矩阵

    width=height=1#每一个柱子的长和宽

    #绘图设置

    fig=plt.figure()

    ax=fig.gca(projection='3d')#三维坐标轴

    ax.bar3d(X, Y, bottom, width, height, Z, shade=True)#

    #坐标轴设置

    ax.set_xlabel('X')

    ax.set_ylabel('Y')

    ax.set_zlabel('Z(value)')

    plt.show()

    代码解读:

    1、构造需要显示的数据

    如下图所示,X坐标取值为[0,1,2,3,4],Y坐标取值为[0,1,2,3,4,5,6,7,8],每一个(X,Y)组合的值Z=X+Y,所需要绘制的图就是在X,Y所对应的坐标位置上面根据Z的值来绘制柱形图。

    1-20091F00309.png

    2、坐标设置

    将坐标网格化, X=[0,1,2,3,4],Y=[0,1,2,3,4,5,6,7,8]网格化的结果,如下图所示。可以理解为,X参照Y进行了广播(broadcast), Y参照X进行了广播,分别添加了一个新的维度,并且进行复制。结合xx和yy就得到了所有的X,Y的坐标组合,经过扁平化之后这种对应关系保持不变。代码中的bottom是用来设置绘制每一个柱子的Z坐标的,在此全部都设置为0,而width和height设置每一个柱子的长和宽。

    1-20091F00309-50.png

    3、bar3d

    ax.bar3d(X, Y, bottom, width, height, Z, shade=True):

    X,Y:柱子在XY平面的起始坐标

    bottom:柱子在Z轴上的起始坐标

    width、height:柱子的长宽

    Z:数字沿Z轴的长度

    shade:是否显示阴影(设置为True立体效果会更好)

    shde=True

    1-20091F00309-51.png

    shade=False

    1-20091F00310.png

    如果需要绘制多个子图,并且里面每一个子图都是3D的,只需要将上述代码进行些许修改即可,案例如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    fig=plt.figure()

    ax=fig.add_subplot(1,3,1, projection='3d')

    ax.bar3d(x, y, z, width, height, top, shade=True)

    ax=fig.add_subplot(1,3,2, projection='3d')

    ax.bar3d(x, y, z, width, height, top2, shade=True)

    ax=fig.add_subplot(1,3,3, projection='3d')

    ax.bar3d(x, y, z, width, height, top3, shade=True)

    plt.show()

    以上就是如何用Python绘制3D柱形图的详细内容,更多关于python绘制柱形图的资料请关注服务器之家其它相关文章!

    原文链接:https://www.cnblogs.com/AlgrithmsRookie/p/11677614.html

    展开全文
  • 在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib。Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效;...一、图形绘制直方importmatplotl...

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib。

    Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效;matplotlib是一个Python的图像框架,使用其绘制出来的图形效果和MATLAB下绘制的图形类似。

    下面我通过一些简单的代码介绍如何使用 Python绘图。

    一、图形绘制

    2017021116034350.png

    直方图

    importmatplotlib.pyplotasplt

    importnumpyasnp

    mu=100

    sigma=20

    x=mu+sigma*np.random.randn(20000)# 样本数量

    plt.hist(x,bins=100,color='green',normed=True)# bins显示有几个直方,normed是否对数据进行标准化

    plt.show()

    条形图

    importmatplotlib.pyplotasplt

    importnumpyasnp

    y=[20,10,30,25,15]

    index=np.arange(5)

    plt.bar(left=index,height=y,color='green',width=0.5)

    plt.show()

    折线图

    importmatplotlib.pyplotasplt

    importnumpyasnp

    x=np.linspace(-10,10,100)

    y=x**3

    plt.plot(x,y,linestyle='--',color='green',marker='<')

    plt.show()

    散点图

    importmatplotlib.pyplotasplt

    importnumpyasnp

    x=np.random.randn(1000)

    y=x+np.random.randn(1000)*0.5

    plt.scatter(x,y,s=5,marker='<')# s表示面积,marker表示图形

    plt.show()

    饼状图

    importmatplotlib.pyplotasplt

    importnumpyasnp

    labels='A','B','C','D'

    fracs=[15,30,45,10]

    plt.axes(aspect=1)#使x y轴比例相同

    explode=[0,0.05,0,0]# 突出某一部分区域

    plt.pie(x=fracs,labels=labels,autopct='%.0f%%',explode=explode)#autopct显示百分比

    plt.show()

    箱形图

    主要用于显示数据的分散情况。图形分为上边缘、上四分位数、中位数、下四分位数、下边缘。外面的点时异常值

    importmatplotlib.pyplotasplt

    importnumpyasnp

    np.random.seed(100)

    data=np.random.normal(size=(1000,4),loc=0,scale=1)

    labels=['A','B','C','D']

    plt.boxplot(data,labels=labels)

    plt.show()

    二、图像的调整

    1、23种点形状

    "."point","pixel"o"circle"v"triangle_down

    "^"triangle_up"<"triangle_left">"triangle_right"1"tri_down

    "2"tri_up"3"tri_left"4"tri_right"8"octagon

    "s"square"p"pentagon"*"star"h"hexagon1"H"hexagon2

    "+"plus"x"x"D"diamond"d"thin_diamond

    2、8种內建默认颜色的缩写

    b:blueg:greenr:redc:cyan

    m:magentay:yellowk:blackw:white

    3、4种线性

    - 实线 --虚线 -.点划线 :点线

    4、一张图上绘制子图

    2017021116034351.png

    importmatplotlib.pyplotasplt

    importnumpyasnp

    x=np.arange(1,100)

    plt.subplot(221)#2行2列第1个图

    plt.plot(x,x)

    plt.subplot(222)

    plt.plot(x,-x)

    plt.subplot(223)

    plt.plot(x,x*x)

    plt.subplot(224)

    plt.plot(x,np.log(x))

    plt.show()

    5、生成网格

    2017021116034452.png

    importmatplotlib.pyplotasplt

    importnumpyasnp

    y=np.arange(1,5)

    plt.plot(y,y*2)

    plt.grid(True,color='g',linestyle='--',linewidth='1')

    plt.show()

    6、生成图例

    2017021116034453.png

    importmatplotlib.pyplotasplt

    importnumpyasnp

    x=np.arange(1,11,1)

    plt.plot(x,x*2)

    plt.plot(x,x*3)

    plt.plot(x,x*4)

    plt.legend(['Normal','Fast','Faster'])

    plt.show()

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: 使用Python绘制图表大全总结

    本文地址: http://www.cppcns.com/jiaoben/python/178957.html

    展开全文
  • )) .set_global_opts(title_opts=opts.TitleOpts(title='实际销售金额', subtitle="QDM"), xaxis_opts=opts.AxisOpts(name='商品'), yaxis_opts=opts.AxisOpts(name='单位:万元')) ) # bar.render('柱状图.html') ...

    bar = (

    Bar()

    .add_xaxis(x_vals)

    .add_yaxis("广州门店", [random.randint(10, 100) for _ in range(6)])

    .add_yaxis("中山门店", [random.randint(10, 100) for _ in range(6)])

    .add_yaxis("深圳门店", [random.randint(10, 100) for _ in range(6)])

    .add_yaxis("东莞门店", [random.randint(10, 100) for _ in range(6)])

    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, font_size=14),

    markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=40, name="达标线=40")]))

    .set_global_opts(title_opts=opts.TitleOpts(title='实际销售金额', subtitle="QDM"),

    xaxis_opts=opts.AxisOpts(name='商品'),

    yaxis_opts=opts.AxisOpts(name='单位:万元'))

    )

    # bar.render('柱状图.html')

    # 或者

    bar.render_notebook()

    渲染效果:

    up-791612a613b14f674f020702eaccb01c146.png

    up-32d84f592597dbc79917886f3def4fca817.gif

    goods = ["蔬菜","水果","猪肉","电商","综合","水产"]

    bar = (

    Bar()

    .add_xaxis(goods)

    .add_yaxis('供应商A', [random.randint(10, 100) for _ in range(6)], stack='stack1')

    .add_yaxis('供应商B', [random.randint(10, 100) for _ in range(6)], stack='stack1')

    .add_yaxis('供应商C', [random.randint(10, 100) for _ in range(6)], stack='stack1')

    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

    .set_global_opts(title_opts=opts.TitleOpts(title="实际销售数量"),

    xaxis_opts=opts.AxisOpts(name="品类"),

    yaxis_opts=opts.AxisOpts(name="销量(单位:件)"))

    )

    # bar.render('柱状堆叠图.html')

    # 或者

    bar.render_notebook()

    渲染效果:

    up-b05b1dc999d96ee0112a9e0aa5da42310de.png

    up-8bab5acd0aefa6682c9d4e07f8715b74b7c.gif

    # 条形图

    x_vals1 = ["白鲳鱼","小生蚝","秋刀鱼","多春鱼","南鲳鱼","海三宝"]

    x_vals2 = ["银鱼仔","基围虾","沙甲","多宝鱼","泥猛","鲍鱼"]

    x_vals3 = ["中鲫鱼","武昌鱼","白花鱼","海鲈鱼","眉草鱼","大乌头"]

    # 把模拟的随机数改为列表形式,并按升序排列

    y_vals = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

    bar = Bar().add_xaxis(x_vals1 + x_vals2 + x_vals3)

    bar.add_yaxis("品控打折验收单品", y_vals,

    markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='average'),

    opts.MarkPointItem(type_='max'),

    opts.MarkPointItem(type_='min')],

    symbol_size=80)

    )

    bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right"))

    # 条目较多条形图比较好看点

    bar.set_global_opts(title_opts=opts.TitleOpts(title="打折单品个数", subtitle="邮件"))

    bar.reversal_axis() #翻转XY轴,将柱状图转换为条形图

    # bar.render('条形图.html')

    # 或者

    bar.render_notebook()

    渲染效果:

    up-2eab8f9455b03ccda0e5f7e592c263ac5cf.png

    up-5af41148e5e361d08248b72c2aa684cb97c.gif

    # 条形图

    # 把3个列表合并为一个列表----> 需要用到Excel中的 Ctrl+H , Windows+10 , "," 快捷键

    x_vals1 = ["白鲳鱼","小生蚝","秋刀鱼","多春鱼","南鲳鱼","海三宝","银鱼仔","基围虾","沙甲","多宝鱼","泥猛","鲍鱼",

    "中鲫鱼","武昌鱼","白花鱼","海鲈鱼","眉草鱼","大乌头"]

    # x_vals2 = ["银鱼仔","基围虾","沙甲","多宝鱼","泥猛","鲍鱼"]

    # x_vals3 = ["中鲫鱼","武昌鱼","白花鱼","海鲈鱼","眉草鱼","大乌头"]

    # 把模拟的随机数改为列表形式,并按升序排列

    y_vals = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

    # bar = Bar().add_xaxis(x_vals1 + x_vals2 + x_vals3)

    bar = Bar().add_xaxis(x_vals1)

    bar.add_yaxis("品控打折验收单品", y_vals,

    markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='average'),

    opts.MarkPointItem(type_='max'),

    opts.MarkPointItem(type_='min')],

    symbol_size=80)

    )

    bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right"))

    # 条目较多条形图比较好看点

    bar.set_global_opts(title_opts=opts.TitleOpts(title="打折单品个数", subtitle="邮件"))

    bar.reversal_axis() #翻转XY轴,将柱状图转换为条形图

    bar.render('条形图.html')

    # 或者

    bar.render_notebook()

    渲染效果:

    up-24708b3e05cd2f9a31642e6a88155d953aa.png

    # 条形图(纯净版)

    # 把3个列表合并为一个列表----> 需要用到Excel中的 Ctrl+H , Windows+10 , "," 快捷键

    x_vals1 = ["白鲳鱼","小生蚝","秋刀鱼","多春鱼","南鲳鱼","海三宝","银鱼仔","基围虾","沙甲","多宝鱼","泥猛","鲍鱼",

    "中鲫鱼","武昌鱼","白花鱼","海鲈鱼","眉草鱼","大乌头"]

    # 把模拟的随机数改为列表形式,并按升序排列

    y_vals = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

    bar = Bar().add_xaxis(x_vals1)

    bar.add_yaxis("品控打折验收单品", y_vals,

    )

    bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right"))

    # 条目较多条形图比较好看点

    bar.set_global_opts(title_opts=opts.TitleOpts(title="打折单品个数", subtitle="邮件"))

    bar.reversal_axis() #翻转XY轴,将柱状图转换为条形图

    # bar.render('条形图.html')

    # 或者

    bar.render_notebook()

    渲染效果:

    up-806814142cb9b5f4c64e4f8f2dc6fa4341a.png

    展开全文
  • (0.52,0.83), ## 设置图例位置 figure_size = (9,5), ## 画布的大小 axis_title_x = element_blank(), ## X轴标题为空 axis_title_y = element_blank() ## Y轴标题为空 ) ) 如果用matplotlib绘制分组柱状图,...
  • 标题:零基础用 Python 画图表,让你的论文高一个逼格曾经我在高中的时候有一篇数学探索的小作业,其中我需要画出一张比较复杂的函数。由于 X 和 Y 的坐标轴标签都需要一定的自定义,所以微软 Office 自带的画图...
  • 九、柱状图和3D柱状图 数据 三个字段 新建报表 新建Dataset作为画图数据源 新建柱状图 并选择数据源为刚刚新建的数据源 选择柱状图类别 第一个参数设置为柱状图的类别,有几条柱状图 若只有一个类别可不指定 ...
  • 安装 cnpm i echarts ...//2 柱状图标题 //3 x轴描述 //4 y轴数据 //5 y轴最大刻度 drawBar(sysDiv, textTitle, xData, yData, maxYNum) { let myBarChart = this.$echarts.init(document.getEle
  • //由于此不需要X轴。所以设置为false NumberAxis y = (NumberAxis)xyPlot.getRangeAxis(); y.setAutoRange(true);//X轴是否自动 y.setTickLabelFont(FONT10); y.setTickLabelPaint(BLACK_BACKGROUND); y...
  • 绝对保质保量。 自己制作的一个3D效果可以实时变化的柱状图类。实现任意指定个数,随时删除或者增加,并自动计算柱状图位置及宽度,可以指定柱状图标题、颜色、高度等等。 静态效果与office中的柱状图表相同。
  • Echarts 柱状图 多条柱子 颜色 宽度 标题 柱状图 背景线条不要 柱子中间不要有空格 图例右边 标识右边
  • 第一次写文,只是想记录一下自己平时发现的小功能,这篇主要是实现echarts柱状图,每个柱子实现不同颜色的渐变色,也... title:{//柱状图标题的样式设置  text:"日用电量同比图",  x : 'center',  backgroun...
  • echart柱状图统计带标题,滑过显示数量的效果代码 import * as echarts from 'echarts'; var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option; option = { title...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 493
精华内容 197
关键字:

柱状图标题