当前位置: 首页> 游戏> 攻略 > 比较(五)利用python绘制棒棒糖图

比较(五)利用python绘制棒棒糖图

时间:2025/7/21 13:58:49来源:https://blog.csdn.net/weixin_39293132/article/details/140103840 浏览次数:0次

比较(五)利用python绘制棒棒糖图

棒棒糖图(Lollipop plot)简介

1

棒棒糖图实际上是修饰后的条形图。当在处理大量的值,并且当这些值都很高时,棒棒糖图就很有用。

快速绘制

  1. 基于matplotlib

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt# 自定义数据
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'values':np.random.uniform(size=20) })# 按值重新排序
    ordered_df = df.sort_values(by='values')
    my_range=range(1,len(df.index)+1)# 利用stem(茎叶图)快速绘制
    plt.stem(ordered_df['values'])
    plt.xticks( my_range, ordered_df['group'])plt.show()
    

    2

定制多样化的棒棒糖图

自定义棒棒糖图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

matplotlib主要利用stem绘制棒棒糖图,可以通过matplotlib.pyplot.stem了解更多用法

  1. 修改参数

    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签# 自定义数据
    values = np.random.uniform(size=50)# 初始化布局
    fig = plt.figure(figsize=(12,6))# 隐藏标记
    plt.subplot(2, 3, 1) 
    plt.stem(values, markerfmt=' ', bottom=0.5)
    plt.title('隐藏标记')# 隐藏基线
    plt.subplot(2, 3, 2) 
    plt.stem(values, basefmt=" ")
    plt.title('隐藏基线')# 自定义基线位置
    plt.subplot(2, 3, 3) 
    plt.stem(values, markerfmt=' ', bottom=0.5)
    plt.title('自定义基线位置')# 通过获取stem返回值获取(markers, stemlines, baseline),并进行自定义操作
    # 获取markers并自定义标记
    plt.subplot(2, 3, 4) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(markers, marker='D', markersize=10, markeredgecolor="orange", markeredgewidth=2)
    plt.title('获取markers并自定义标记')# 获取baseline并自定义基线
    plt.subplot(2, 3, 5) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(baseline, linestyle="-", color="grey", linewidth=6)
    plt.title('获取baseline并自定义基线')# 获取baseline并自定义茎叶
    plt.subplot(2, 3, 6) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(stemlines, linestyle="-", color="olive", linewidth=0.5 )
    plt.title('获取baseline并自定义茎叶')plt.tight_layout()
    plt.show()
    

    3

  2. 水平棒棒糖图

    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签# 自定义数据
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'values':np.random.uniform(size=20) })# 按值重新排序
    ordered_df = df.sort_values(by='values')
    my_range=range(1,len(df.index)+1)# 自定义需要重点突出的数据
    my_color=np.where(ordered_df ['group']=='B', 'orange', 'skyblue')
    my_size=np.where(ordered_df ['group']=='B', 70, 30)# 初始化布局
    fig = plt.figure(figsize=(12,4))# 水平棒棒糖图
    plt.subplot(1, 2, 1) 
    plt.hlines(y=my_range, xmin=0, xmax=ordered_df['values'], color='skyblue')
    plt.plot(ordered_df['values'], my_range, "o")
    plt.yticks(my_range, ordered_df['group'])
    plt.title('水平棒棒糖图')# 水平棒棒糖图-Highlight
    plt.subplot(1, 2, 2) 
    plt.hlines(y=my_range, xmin=0, xmax=ordered_df['values'], color=my_color, alpha=0.4)
    plt.scatter(ordered_df['values'], my_range, color=my_color, s=my_size, alpha=1)
    plt.yticks(my_range, ordered_df['group'])
    plt.title('水平棒棒糖图-Highlight')plt.show()
    

    4

  3. 分组棒棒糖图

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt# 自定义数据
    value1=np.random.uniform(size=20)
    value2=value1+np.random.uniform(size=20)/4
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'value1':value1 , 'value2':value2 })# 重新排序
    ordered_df = df.sort_values(by='value1')
    my_range=range(1,len(df.index)+1)# 绘制水平棒棒糖图
    plt.hlines(y=my_range, xmin=ordered_df['value1'], xmax=ordered_df['value2'], color='grey', alpha=0.4)
    plt.scatter(ordered_df['value1'], my_range, color='skyblue', alpha=1, label='value1')
    plt.scatter(ordered_df['value2'], my_range, color='green', alpha=0.4 , label='value2')
    plt.legend()# 标题、轴标签
    plt.yticks(my_range, ordered_df['group'])
    plt.title("Comparison of the value 1 and the value 2", loc='left')
    plt.xlabel('Value of the variables')
    plt.ylabel('Group')plt.show()
    

    5

  4. 颜色对比棒棒糖图

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns# 自定义数据
    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(x) + np.random.uniform(size=len(x)) - 0.2# 自定义颜色:正值为橘色
    my_color = np.where(y>=0, 'orange', 'skyblue')# 绘制棒棒糖图
    plt.vlines(x=x, ymin=0, ymax=y, color=my_color, alpha=0.4)
    plt.scatter(x, y, color=my_color, s=1, alpha=1)# 标题、轴标签
    plt.title("Evolution of the value of ...", loc='left')
    plt.xlabel('Value of the variable')
    plt.ylabel('Group')plt.show()
    

    6

总结

以上通过matplotlib的stem快速绘制棒棒糖图,也可以利用matplotlib的vlines(垂直线)+scatter(散点)构造各种各样的棒棒糖图。

共勉~

关键字:比较(五)利用python绘制棒棒糖图

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: