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

如何在散点图中仅绘制正值且保留全部日期X轴标签

问题需求

我们有一个嵌套字典,第一层键是日期元组,第二层字典以数字为键、对应数值为值。需要绘制散点图,要求:

  • 仅展示每个日期对应的正值数据点
  • 保留所有日期作为X轴标签:如果某日期对应的所有值都是零或负数,该日期仍留在X轴上,但不显示任何数据点

当前示例代码会绘制所有值,我们需要修改它,让2006-02-03和2006-04-05这两个日期不显示任何点,同时X轴的标签和间距保持不变。

原示例代码

import matplotlib.pyplot as plt

dictt = {('2005-01-04', '2006-01-04'): {0: 0, 1: 3, 2: -1, 3: 5}, ('2005-02-03', '2006-02-03'): {0: 0, 1: 0, 2: 0, 3: 0},
('2005-03-07', '2006-03-07'):  {0: -3, 1: 0, 2: 3, 3: 5}, ('2005-04-06', '2006-04-05'):  {0: -2, 1: -3, 2: -1, 3: -2}}

for k in list(dictt.keys()):
    for i in range(4):
        plt.scatter(k[1], dictt[k[0], k[1]][i])

修改后的代码

import matplotlib.pyplot as plt

dictt = {('2005-01-04', '2006-01-04'): {0: 0, 1: 3, 2: -1, 3: 5}, ('2005-02-03', '2006-02-03'): {0: 0, 1: 0, 2: 0, 3: 0},
('2005-03-07', '2006-03-07'):  {0: -3, 1: 0, 2: 3, 3: 5}, ('2005-04-06', '2006-04-05'):  {0: -2, 1: -3, 2: -1, 3: -2}}

# 提取所有要显示的X轴标签
x_labels = [k[1] for k in dictt.keys()]
# 为每个日期分配固定位置,确保X轴包含所有日期
x_positions = range(len(x_labels))

# 遍历每个日期对应的数值,仅绘制正值
for idx, k in enumerate(dictt.keys()):
    for val in dictt[k].values():
        if val > 0:
            plt.scatter(x_positions[idx], val)

# 设置X轴刻度与标签,保持原日期顺序和间距
plt.xticks(x_positions, x_labels)
plt.show()

代码说明

  • 先提取所有日期作为X轴标签,给每个日期分配索引位置,确保X轴不会因无数据点丢失标签
  • 遍历每个日期的数值,仅对大于0的值绘制散点图,自动过滤零和负数
  • 通过plt.xticks()将索引位置映射回原日期标签,保证X轴的显示效果符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:27:20