对比学习,用Excel和Python绘制「棒棒糖图」

本文介绍了如何使用Excel和Python绘制棒棒糖图。在Excel中,通过组合图设置柱状图和散点图样式实现;在Python中,采用Bar+Scatter组合法或matplotlib的stem函数轻松绘制,并提供了调整样式和基线的方法。文章还展示了大量实例和代码示例。
摘要由CSDN通过智能技术生成


公众号后台回复“图书“,了解更多号主新书内容
     作者:云朵君
     来源:数据STUDIO

今天给大家带来一篇比较有意思的可视化图——????棒棒糖图????详细绘图教程。对比Excel与Pyhton,手把手教你绘制高大上的????棒棒糖图????。

Excel绘制棒棒糖图

首先是数据准备,首先将原始数据复制一列,得到两列一样的数据。

选择数据,插入组合图,分别设置柱状图和散点图的组合图表,确认后既可以得到初步的棒棒糖图。

可根据需要设置相应的样式:

其中设置x轴的位置相对较复杂些。

首先选中y轴,右击再点击设置坐标轴格式,接下来分别设置横坐标轴位置及横坐标轴标签。设置x坐标轴值为0.8,或者你需要的轴。设置x坐标轴标签在图的底部。

结果得到如下样式。

当然,可以设置条形和散点的样式,如颜色形状等。也可以单独选中某条柱状图和散点标志的样式,以突出某个或某些值。

Python绘制棒棒糖图

Bar+Scatter组合法

第一种方法,和Excel思路一样,运用条形图(plt.bar)和散点图(plt.scatter)组合绘制。如果想要不同的样式,可以分别设置条形图和散点图的样式,来改变整体样式。

n = len(values)
colors1 = ["red"]+((n-1)*["olive"])
colors2 = ["red"]+((n-1)*["blue"])
plt.rcParams['figure.figsize'] = (23.5, 10)  
plt.bar(values.index, values.values, 
        color=colors1, # 设置线条颜色
        width=0.05)    # 设置线条宽度
plt.scatter(values.index, values.values, 
            color=colors2,# 设置标记点宽度
            s=50)         # 设置标记点大小
plt.show()
设置样式

这一步主要实现将X轴向上移动。

  • 将所有y值加上一个固定值v(负数):y = y+v

  • 并且设置y轴的下限为该固定值v :plt.ylim(v, 0.6)

绘制一条横线

  • 通过绘制折线的方法绘制一条基线,并固定 y=0
    plt.plot(values.index, [0]*n)

  • 或直接用直线函数绘制基线,同样设置 y=0
    plt.axhline(y=0, xmin=0, xmax=1)

  • 上面两种方法均可以绘制直线图,第二种方法的缺点是在设置直线两个端点时,不太好把控,因为xmin和xmax设置的值在0~1之间的比例值。而第二种方法可以直接设置折线两端点值。

plt.style.use('ggplot')
# plt.style.use('dark_background') # 设置黑色背景
plt.rcParams['figure.figsize'] = (23.5, 10)  
plt.rcParams['axes.unicode_minus'] = False
v = -0.8
plt.bar(values.index, values.values+v, 
        color=colors1,width=0.05)
plt.scatter(values.index, values.values+v, 
            color=colors2,s=60)
# plt.plot(values.index,[0]*n,color='darkblue')
plt.axhline(y=0,xmin=0.045, xmax=0.955, 
            color='darkblue' , 
            linestyle='--')
plt.ylim(v,0.6)
plt.show()

Stem 函数法

在python中,我们利用matplotlib.pyplot.stem可以直接绘制棒棒糖图(茎叶图)。这个函数只需要一行代码就能绘制棒棒糖图。下面来看看该神奇的plt.stem()的主要参数。

stem(x,y, linefmt=None, markerfmt=None, basefmt=None)

x : array-like, optional
数据x轴

y : array-like
数据y轴

linefmt : str, optional
可以使用颜色和线型来设置垂直线的颜色和类型,如'r-',代表红色的实线。

markerfmt : str, optional
设置顶点的类型和颜色,默认值:'C0o'C(大写字母C)是默认的,后面数字应该是0-9,改变颜色,最后的.或者o(小写字母o)分别可以设置顶点为小实点或者大实点。

basefmt : str, default: 'C3-' ('C2-' in classic mode)
定义基线属性的格式字符串。就是y=0的那条线

从参数来看,使用其参数设置颜色,只能选用该函数设定好了的颜色圈内的0-9号颜色。如果想要设置其他颜色,可以利用plt.setp来设置线条样式。

 n = len(values2)
colors1 = ["red"]+((n-1)*["olive"])
(markers, stemlines, baseline) = plt.stem(values2, markerfmt="C0o")
plt.setp(stemlines, 
         linestyle="-", 
         color=colors1, 
         linewidth=0.5 )  # 指定每行的属性
plt.setp(baseline, 
         linestyle="--", 
         color="darkblue", 
         linewidth=2 )
plt.show()

通过设置参数bottom=0.8来调整基线位置,并设置背景样式。

plt.style.use('dark_background') 
plt.grid(0)
(markers, stemlines, baseline) = plt.stem(values2, 
                                          bottom=0.8,
                                          markerfmt="C3o")
plt.setp(stemlines, linestyle="-", 
         color="y", linewidth=2 )  
plt.show()



最后看下当数据量超多的时候,绘制棒棒糖图的效果。


◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python绘制散点并从Excel表格中获取数据,你可以按照以下步骤进行操作: 1. 首先,导入所需的模块。你需要导入pandas和matplotlib.pyplot。可以使用以下代码实现: ```python import pandas as pd import matplotlib.pyplot as plt ``` 2. 接下来,使用pandas的`read_excel`函数从Excel表格中读取数据。你需要提供Excel文件的路径,比如`'销售业绩表.xlsx'`。可以使用以下代码实现: ```python df = pd.read_excel('销售业绩表.xlsx') ``` 3. 然后,设置表的中文显示。你可以使用以下代码确保中文显示正确: ```python plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False ``` 4. 确定X轴和Y轴的数据。根据你的Excel表格的结构,选择要用作X轴和Y轴的列。假设你的Excel表格中有一个"月份"列和一个"销售额"列,你可以使用以下代码提取数据: ```python x = df['月份'] y = df['销售额'] ``` 5. 使用`scatter`函数绘制散点。你可以使用以下代码绘制散点: ```python plt.scatter(x, y) ``` 6. 可以根据需要添加标题、轴标签和数据标签。你可以使用以下代码添加这些元素,并根据需要进行自定义: ```python plt.title('销售额散点') plt.xlabel('月份') plt.ylabel('销售额') for a, b in zip(x, y): plt.text(a, b, b) ``` 7. 最后,使用`show`函数显示绘制的散点: ```python plt.show() ``` 请注意,上述代码仅为示例,你需要根据自己的实际数据和需求进行相应的调整。另外,确保你已经安装了所需的模块(pandas和matplotlib)以及下载了Excel表格文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值