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

如何使用Matplotlib复刻R中ggplot2绘制的散点图?

用Matplotlib复刻ggplot2风格散点图

以下是针对你的需求,用Matplotlib实现包含散点、国家标签、中位数虚线及标注的完整方案,代码可直接适配你的字典数据:

1. 数据预处理

首先把你提供的Python字典转成Pandas DataFrame,方便后续绘图操作:

import pandas as pd
import matplotlib.pyplot as plt

# 替换成你的实际字典数据
your_data = {
    "country": ["China", "USA", "Japan", "Germany", "India"],
    "x_var": [100, 150, 80, 90, 70],
    "y_var": [50, 70, 60, 65, 45]
}

df = pd.DataFrame(your_data)

2. 绘制基础散点

创建画布和坐标轴,画出核心散点:

fig, ax = plt.subplots(figsize=(10, 6))

# 绘制散点,可根据原图表调整颜色、大小、透明度
ax.scatter(df["x_var"], df["y_var"], color="#1f77b4", s=100, alpha=0.7)

3. 添加国家名称标签

遍历每个数据点,在散点旁添加对应国家名称,可通过偏移量避免重叠:

for _, row in df.iterrows():
    # 这里的+0.5和0是偏移量,可根据你的数据调整
    ax.text(row["x_var"] + 0.5, row["y_var"], row["country"],
            fontsize=10, ha="left", va="center")

4. 添加中位数虚线与标注

计算x、y变量的中位数,绘制虚线并添加标注文本:

# 计算中位数
x_med = df["x_var"].median()
y_med = df["y_var"].median()

# X轴中位数虚线
ax.axvline(x=x_med, color="#ff7f0e", linestyle="--", linewidth=2)
# 标注X轴中位数,位置可按需调整
ax.text(x_med, ax.get_ylim()[0] - 2, f"X中位数: {x_med:.1f}",
        color="#ff7f0e", ha="center", va="top")

# Y轴中位数虚线
ax.axhline(y=y_med, color="#2ca02c", linestyle="--", linewidth=2)
# 标注Y轴中位数,旋转90度贴近Y轴
ax.text(ax.get_xlim()[0] - 3, y_med, f"Y中位数: {y_med:.1f}",
        color="#2ca02c", ha="right", va="center", rotation=90)

5. 优化图表样式(贴近ggplot2风格)

如果需要更接近ggplot2的视觉效果,可调整坐标轴、网格和标题:

ax.set_xlabel("X变量名称", fontsize=12)
ax.set_ylabel("Y变量名称", fontsize=12)
ax.set_title("图表标题", fontsize=14, pad=20)

# 开启浅色网格,模拟ggplot2背景
ax.grid(True, linestyle="-", alpha=0.3)

# 调整坐标轴范围,防止标签超出画布
ax.set_xlim(ax.get_xlim()[0] - 5, ax.get_xlim()[1] + 5)
ax.set_ylim(ax.get_ylim()[0] - 3, ax.get_ylim()[1] + 3)

plt.tight_layout()
plt.show()

注意事项

  • 散点颜色、大小、虚线样式可根据原ggplot2图的参数直接替换
  • 如果数据量较大导致标签重叠,可安装adjustText库,用adjust_text()函数自动优化标签位置
  • 所有偏移量(如文本的x/y偏移、坐标轴范围调整)需根据你的实际数据微调

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:15:41