修改散点图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无法将数值识别为日期刻度,导致刻度设置失效
二、日期分位数的正确处理逻辑
- 转换日期类型:先把数值型的
yyyymmdd转为datetime类型,这样才能基于时间维度计算分位数 - 计算时间分位数:对
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
相关产品推荐
相关产品推荐

