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

修改散点图x轴刻度时遇'numpy.ndarray'不可调用错误的技术问询

问题解决:散点图X轴刻度设置与日期分位数处理

一、报错原因拆解

  • 你误用了plt.set_title()/plt.set_xlabel()/plt.set_ylabel(),matplotlib.pyplot模块没有这些方法,正确写法是plt.title()/plt.xlabel()/plt.ylabel()
  • 代码里的fig未定义,fig.show()应该替换为plt.show()
  • 核心问题:Datum列是yyyymmdd格式的数值,直接计算分位数逻辑错误(数值分位数≠时间维度分位数),且matplotlib无法将数值识别为日期刻度,导致刻度设置失效

二、日期分位数的正确处理逻辑

  1. 转换日期类型:先把数值型的yyyymmdd转为datetime类型,这样才能基于时间维度计算分位数
  2. 计算时间分位数:对datetime类型的日期列计算分位数,得到的结果是合法的时间对象,matplotlib可以直接识别为日期刻度

三、修正后的完整代码

import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as stats
import pandas as pd

# 1. 将数值型日期转换为datetime类型,确保时间维度的计算合理
df_tagesspiegel_final['Datum'] = pd.to_datetime(df_tagesspiegel_final['Datum'], format='%Y%m%d')

# 皮尔逊相关系数计算:datetime需转为时间戳(秒)才能传入stats.pearsonr
correlation, p_value = stats.pearsonr(
    df_tagesspiegel_final['Datum'].astype('int64') // 10**9,
    df_tagesspiegel_final['compound']
)
print(correlation)
print(p_value)

# 绘制散点图
sns.scatterplot(x='Datum', y='compound', data=df_tagesspiegel_final)

# 2. 基于datetime列计算分位数作为X轴刻度
date_series = df_tagesspiegel_final['Datum']
xticks = [
    date_series.min(),
    date_series.quantile(0.25),
    date_series.quantile(0.5),
    date_series.quantile(0.75),
    date_series.max()
]

# 设置刻度并格式化日期标签(避免重叠,旋转45度)
plt.xticks(
    ticks=xticks,
    labels=[dt.strftime('%Y-%m-%d') for dt in xticks],
    rotation=45
)

# 修正标题与轴标签的调用方式
plt.title('Korrelation von Datum und compound')
plt.xlabel('Datum')
plt.ylabel('compound')

# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()

关键细节说明

  • 日期转换:pd.to_datetime()指定format='%Y%m%d',确保数值正确解析为日期
  • 相关系数计算:datetime类型无法直接参与皮尔逊相关计算,需转为时间戳(单位秒)
  • 刻度格式化:用strftime()将datetime对象转为易读的YYYY-MM-DD格式,rotation=45避免标签重叠
  • plt.tight_layout():自动调整图表元素位置,确保所有标签完整显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:24