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

如何绘制以年份为X轴、城市为Y轴的数值尺寸散点图(Python/Excel)

Python 实现方案

步骤1:数据格式转换

你的原始DataFrame是宽格式(行是城市、列是年份),需要先转成长格式才能适配散点图的输入要求:

import pandas as pd
import matplotlib.pyplot as plt

# 模拟你的数据(已有DataFrame可跳过此段)
sample_data = {
    2015: [12, 34, 56],
    2016: [23, 45, 67],
    2017: [34, 56, 78]
}
df = pd.DataFrame(sample_data, index=["北京", "上海", "广州"])

# 转长格式
df_long = df.reset_index().melt(
    id_vars="index", 
    var_name="年份", 
    value_name="数值"
).rename(columns={"index": "城市"})

步骤2:绘制散点图

用matplotlib直接实现,或者用seaborn简化代码:

方式1:Matplotlib

plt.figure(figsize=(10, 6))
# 给每个城市分配Y轴位置(分类变量转数值坐标)
city_y_pos = {city: idx for idx, city in enumerate(df_long["城市"].unique())}
# 绘制散点,s参数控制大小,乘以系数调整视觉效果
plt.scatter(
    x=df_long["年份"],
    y=df_long["城市"].map(city_y_pos),
    s=df_long["数值"] * 12,
    alpha=0.7,
    color="#3377bb"
)

# 配置坐标轴与样式
plt.xlabel("年份")
plt.ylabel("城市")
plt.title("城市-年份数值散点图")
plt.yticks(list(city_y_pos.values()), list(city_y_pos.keys()))
plt.tight_layout()
plt.show()

方式2:Seaborn(更简洁)

import seaborn as sns

sns.scatterplot(
    data=df_long,
    x="年份",
    y="城市",
    size="数值",
    sizes=(60, 600),
    alpha=0.7,
    color="#3377bb"
)
plt.title("城市-年份数值散点图")
plt.tight_layout()
plt.show()

Excel 实现方案

步骤1:数据逆透视(宽转长)

  1. 将原始表格的行索引(城市)转为单独一列,比如A列填城市名,B列起为各年份数值;
  2. 选中全量数据,点击「数据」→「从表格/区域」(Excel 2016+支持),进入Power Query编辑器;
  3. 选中「城市」列,点击「转换」→「逆透视列」→选择所有年份列,完成后关闭并上载数据,得到「城市/年份/数值」三列的长格式数据。

步骤2:绘制散点图

  1. 选中逆透视后的三列数据,点击「插入」→「散点图」→「仅带数据标记的散点图」;
  2. 右键散点→「设置数据系列格式」,在「系列选项」中勾选「大小」,关联到「数值」列,实现散点大小随数值变化;
  3. 右键Y轴→「设置坐标轴格式」,在「坐标轴选项」→「标签」中选择「自定义」,输入城市列表替换默认刻度;
  4. 调整图表标题、坐标轴标签等样式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:50:25