猿问

仅使用第一个图的刻度频率在单个图中混合来自熊猫数据框的线图和散点图

我想比较数据框中的数据,将一些数据绘制为线,将其他列绘制为散点图。我的实际数据是模型输出和观察的组合,我希望观察是散点,模型是线。


观察值有很多 Nan 值(大多数时间步骤没有观察值)。


这个 MWE 重复了我遇到的问题


import numpy as np

import pandas as pd

import matplotlib.pyplot as plt


base = datetime.datetime.today()

date_list = [base - datetime.timedelta(days=x) for x in range(40)]


df = pd.DataFrame(data = {

    "Time": date_list,

    "Chocolate": np.random.rand(40), 

    "Strawberry": np.random.rand(40), 

    "Fake Chocolate": np.random.rand(40), 

    "Fake Strawberry": np.random.rand(40), 

})

df.iloc[3,3] = np.nan


ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])


ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])

ax2 = df.plot.scatter(x = 'Time', y = ['Fake Chocolate'], marker = '^', ax = ax1)

ax3 = df.plot.scatter(x = 'Time', y = ['Fake Strawberry'], marker = '*', ax = ax1, color = '#ff7f0e')

我想要像第一个图中那样的 x 轴,所以采用线图的样式,你没有每个日期都试图在一个很小的空间中打印。我该怎么做呢?

我正在使用ax1.set来设置 x 和 y 轴标签。

如果我可以偷偷提出第二个问题,为什么可以使用散点图y = []而不是散点图来做多条线?


至尊宝的传说
浏览 82回答 1
1回答

饮歌长啸

只需添加plt.xticks(rotation=45)到脚本的末尾就可以了。import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport datetimebase = datetime.datetime.today()date_list = [base - datetime.timedelta(days=x) for x in range(40)]df = pd.DataFrame(data = {    "Time": date_list,    "Chocolate": np.random.rand(40),     "Strawberry": np.random.rand(40),     "Fake Chocolate": np.random.rand(40),     "Fake Strawberry": np.random.rand(40), })df.iloc[3,3] = np.nanax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])ax2 = df.plot.scatter(x = 'Time', y = ['Fake Chocolate'], marker = '^', ax = ax1)ax3 = df.plot.scatter(x = 'Time', y = ['Fake Strawberry'], marker = '*', ax = ax1, color = '#ff7f0e')plt.xticks(rotation=45);
随时随地看视频慕课网APP

相关分类

Python
我要回答