如何绘制给定DataFrame的数据?

如何解决如何绘制给定DataFrame的数据?

这是我正在使用的主要DataFrame:

     -   Date     Open    High    Low   Close
1. 01-08-2019 | 97.85 | 98.45 | 96.40 |97.25
2. 02-08-2019 | 97.15 | 98.95 | 96.75 |98.15
3. 05-08-2019 | 98.30 | 98.70 | 94.30 |95.65
4. 06-08-2019 | 95.75 | 97.75 | 95.20 |97.05
5. 07-08-2019 | 96.80 | 97.70 | 96.05 |96.90
6. 08-08-2019 | 97.40 | 98.90 | 96.55 |97.40
7. 09-08-2019 | 97.20 | 98.10 | 96.65 |97.30
8. 12-08-2019 | 97.20 | 97.25 | 93.40 |93.75
9. 13-08-2019 | 93.70 | 96.60 | 93.15 |96.35

我从DataFrame上方提取了高,低,每日收盘价,3天,每周,每月数据。如何在单张图中绘制每日高低收盘价,每周最高价,低位,收盘价和每月最高价低位收盘价?

每日高低收盘

      Date      High    Low     Close
0   2019-08-01  98.45   96.40   97.25  
1   2019-08-02  98.95   96.75   98.15  
2   2019-08-05  98.70   94.30   95.65  
3   2019-08-06  97.75   95.20   97.05  
4   2019-08-07  97.70   96.05   96.90  

每周最高,最低,收盘价

    Date        High    Low    Close  
0   2019-08-04  98.95   96.75   98.15  
1   2019-08-11  98.90   96.65   97.40  
2   2019-08-18  97.25   94.15   96.35  
3   2019-08-25  93.85   92.25   93.50  
4   2019-09-01  94.85   93.40   94.20  

每月最高价低位收盘价

     Date        High    Low    Close
0   2019-08-31  98.95   96.75   98.15
1   2019-09-30  104.90  102.08  103.83
2   2019-10-31  102.90  100.15  102.05
3   2019-11-30  118.90  117.95  118.55
4   2019-12-31  138.40  135.85  135.90

Link to CSV file I am working with

解决方法

请记住要删除“假” today日期的变量,因为该数据集不是最新的,所以我必须这样做

import datetime
import matplotlib.pyplot as plt
from datetime import date
from datetime import datetime
from datetime import timedelta

today1 = date.today() #run in up to date dataframe,change to 'today' and remove fake today below

today = '2019-08-06'
w_today = '2019-08-06'
m_today = '2019-08-06'

today  = datetime.strptime(today,'%Y-%m-%d')
today = today.date()
w_today  = datetime.strptime(w_today,'%Y-%m-%d')
w_today = w_today.date()
m_today  = datetime.strptime(m_today,'%Y-%m-%d')
m_today = m_today.date()


df= pd.read_csv('D:/stack_overflow/US Coffee Aug19-Jul20.csv')
df['Date']=pd.to_datetime(df['Date']).dt.date
# df['Date']= df['Date'].floor('D')

#df from today,each day DAILY
df_daily = df[
    df.Date>=today
]

df_daily = df_daily.reset_index(drop=True)

weekly = []
monthly = []

last_date = df_daily['Date'].iloc[-1]

while w_today < last_date:
    w_today+=timedelta(days=7)
    weekly.append(w_today)


while m_today < last_date:
    m_today+=timedelta(days=10)
    monthly.append(m_today)

df_weekly = df_daily[
    df_daily.Date.isin(weekly)
]

df_monthly = df_daily[
    df_daily.Date.isin(monthly)
]
fig,axs = plt.subplots(3)
axs[0].plot(df_daily['Date'],df_daily[['Open','High','Low','Close']])
axs[0].set_title('Daily')
axs[1].plot(df_weekly['Date'],df_weekly[['Open','Close']])
axs[1].set_title('Weekly')
axs[2].plot(df_monthly['Date'],df_monthly[['Open','Close']])
axs[2].set_title('Monthly')

plt.show()

enter image description here

,

重新使用ax对象在同一图中绘制:

import pandas as pd
import matplotlib.pyplot as plt

daily_df = pd.DataFrame([
   ["2019-08-01",98.45,96.40,97.25],["2019-08-02",98.95,96.75,98.15],["2019-08-05",98.70,94.30,95.65],["2019-08-06",97.75,95.20,97.05],["2019-08-07",97.70,96.05,96.90]
],columns=["Date","daily_High","daily_Low","daily_Close"]
)

weekly_df = pd.DataFrame([
   ["2019-08-04",["2019-08-11",98.90,96.65,97.40],["2019-08-18",97.25,94.15,96.35],["2019-08-25",93.85,92.25,93.50],["2019-09-01",94.85,93.40,94.20]
],"weekly_High","weekly_Low","weekly_Close"]
)

monthly_df = pd.DataFrame([
   ["2019-08-31",["2019-09-30",104.90,102.08,103.83],["2019-10-31",102.90,100.15,102.05],["2019-11-30",118.90,117.95,118.55],["2019-12-31",138.40,135.85,135.90]
],"monthly_High","monthly_Low","monthly_Close"]
)

daily_df["Date"] = pd.to_datetime(daily_df["Date"],format='%Y-%m-%d')
weekly_df["Date"] = pd.to_datetime(weekly_df["Date"],format='%Y-%m-%d')
monthly_df["Date"] = pd.to_datetime(monthly_df["Date"],format='%Y-%m-%d')

daily_df.set_index(["Date"],inplace=True)
weekly_df.set_index(["Date"],inplace=True)
monthly_df.set_index(["Date"],inplace=True)

ax = daily_df.plot()
weekly_df.plot(ax=ax)
monthly_df.plot(ax=ax)

plt.show()

enter image description here

,

这是我第一次创建具有多个x轴的图形,并且进行了大量研究。我有几个问题要回答,例如验证数据和改善x轴的显示。我基于these answers对其进行了自定义。

import pandas as pd
import numpy as np

df= pd.read_csv('../../../Downloads/US Coffee Aug19-Jul20 - US Coffee Aug19-Jul20.csv')
df['Date'] = pd.to_datetime(df['Date'])
weeks = df.resample('W-Mon',on='Date')[['High','Close']].agg('mean').reset_index().sort_values(by='Date')
months = df.resample('1M','Close']].agg('mean').reset_index().sort_values(by='Date')

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(16,9),dpi=144)
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()
ax3 = ax1.twiny()

weeks_tick_locations = weeks['Date']
months_tick_locations = months['Date']

ax1.plot(df['Date'],df['High'],lw=1,color='b',label='Daily High')
ax1.plot(df['Date'],df['Close'],color='r',label='Daily Low')

ax2.plot(weeks['Date'],weeks['High'],lw=2,color='g',label='Week High')
ax2.plot(weeks['Date'],weeks['Close'],color='y',label='Week Low')

ax3.plot(months['Date'],months['High'],color='k',label='Month High')
ax3.plot(months['Date'],months['Close'],color='m',label='Month Low')

# Move twinned axis ticks and label from top to bottom
ax2.xaxis.set_ticks_position("bottom")
ax2.xaxis.set_label_position("bottom")

# Offset the twin axis below the host
ax2.spines["bottom"].set_position(("axes",-0.1))

ax2.set_frame_on(True)
ax2.patch.set_visible(False)

for sp in iter(ax2.spines.values()):
    sp.set_visible(False)
ax2.spines["bottom"].set_visible(True)

ax2.set_xticks(weeks_tick_locations)
ax2.set_xticklabels(weeks_tick_locations)
ax2.set_xlabel('Week')

ax3.xaxis.set_ticks_position("bottom")
ax3.xaxis.set_label_position("bottom")

# Offset the twin axis below the host
ax3.spines["bottom"].set_position(("axes",-0.2))

ax3.set_frame_on(True)
ax3.patch.set_visible(False)

for sp in iter(ax3.spines.values()):
    sp.set_visible(False)
ax3.spines["bottom"].set_visible(True)

ax3.set_xticks(months_tick_locations)
ax3.set_xticklabels(months_tick_locations)
ax3.set_xlabel('Month')

fig.legend(loc='upper left',bbox_to_anchor=(0.88,0.98),bbox_transform=ax1.transAxes,)
plt.show()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-