You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tableau中制作调查问卷前后结果的Side-by-Side Bar Chart

实现对比并列柱状图的解决方案

用Python的pandas和matplotlib就能快速实现你要的并列柱状图,以下是具体步骤和代码:

1. 准备工作

确保你已经安装了这两个库,没装的话用下面的命令安装:

pip install pandas matplotlib

2. 代码实现

假设你的CSV文件名为survey_data.csv,列标题就是那两个问题文本。直接用下面的代码:

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV数据
df = pd.read_csv("survey_data.csv")

# 重命名列,方便后续操作(可选,但推荐)
df.columns = ["初始开心程度", "观看视频后开心程度"]

# 统计每个分值的出现次数,确保1-10每个值都被包含(避免缺失分值导致绘图断层)
score_range = range(1, 11)
count_initial = df["初始开心程度"].value_counts().reindex(score_range, fill_value=0)
count_after = df["观看视频后开心程度"].value_counts().reindex(score_range, fill_value=0)

# 合并统计结果
count_df = pd.DataFrame({
    "初始评价": count_initial,
    "观看视频后评价": count_after
})

# 设置绘图参数
plt.figure(figsize=(12, 6))
bar_width = 0.35
x = range(len(score_range))

# 绘制并列柱状图
plt.bar([i - bar_width/2 for i in x], count_df["初始评价"], width=bar_width, label="初始开心程度")
plt.bar([i + bar_width/2 for i in x], count_df["观看视频后评价"], width=bar_width, label="观看视频后开心程度")

# 设置轴标签和标题
plt.xlabel("开心程度分值(1-10)")
plt.ylabel("回答人数")
plt.title("观看悲伤视频前后开心程度对比")
plt.xticks(x, score_range)
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)

# 显示图形
plt.tight_layout()
plt.show()

3. 代码说明

  • 重命名列是为了避免长问题文本作为列名带来的操作麻烦,如果你不想改,直接把代码里的列名替换成原始的问题文本即可(注意用引号包裹)。
  • reindex(score_range, fill_value=0)是关键,确保1-10每个分值都有统计结果,哪怕某个分值没人选,也会显示0,这样绘图时横轴不会缺值。
  • 调整bar_width可以改变柱子的宽度,figsize可以调整图形的大小,根据你的需求修改就行。

内容的提问来源于stack exchange,提问作者sunnyfunnybunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:44:58