[英]How to correct overlapping tick labels in matplotlib plot?
我已經准備好繪制數據框,但是當我使用 matplotlib 繪制這些數據時,線條不正確並且沒有顯示趨勢。
例如,第一個圖形應該是一條卷線,但是,我在圖形中繪制了一條直線。
我想知道如何正確繪制這些線? 並修復兩個軸?
import pandas as pd
import datetime as dt
import pandas_datareader as web
import matplotlib.pyplot as plt
from matplotlib import style
import matplotlib.ticker as ticker
from bs4 import BeautifulSoup
import requests
import matplotlib.dates as mdates
url = 'https://www.federalreserve.gov/data.xml'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
for chart in soup.select('chart'):
series = {}
index = []
for s in chart.select('series'):
series[s['description']] = []
temp_index = []
for o in s.select('observation'):
temp_index.append(o['index'])
series[s['description']].append(o['value'])
if len(temp_index) > len(index):
index = temp_index
series['index'] = index
max_len = len(max(series.values(), key=len))
for k in series:
series[k] = series[k] + ['No Data'] * (max_len - len(series[k]))
df = pd.DataFrame(series).set_index('index')
print(df)
print('-' * 80)
plt.figure()
for i in df:
plt.plot(df.index,df[i],label=chart['title'])
plt.show()
df.index = pd.to_datetime(df.index)
已添加df = pd.DataFrame(series, dtype=float).set_index('index')
會捕獲大部分的列,但是有一些列仍然有刺,所以無法轉換print(df.info())
已添加。 查看並修復作為object
任何列。 這意味着該列包含一些字符串並且無法轉換為浮點數。
[np.nan]
而不是['No Data']
,因此可以將列設置為浮點數,這將使其能夠正確繪圖。import numpy as np
url = 'https://www.federalreserve.gov/data.xml'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
for chart in soup.select('chart'):
series = {}
index = []
for s in chart.select('series'):
series[s['description']] = []
temp_index = []
for o in s.select('observation'):
temp_index.append(o['index'])
series[s['description']].append(o['value'])
if len(temp_index) > len(index):
index = temp_index
series['index'] = index
max_len = len(max(series.values(), key=len))
for k in series:
# adding No Data is preventing the the column from being interpreted as a float
series[k] = series[k] + [np.nan] * (max_len - len(series[k]))
df = pd.DataFrame(series, dtype=float).set_index('index') # added dtype=float
df.index = pd.to_datetime(df.index) # convert the index to a datetime format
print(df)
print(df.info()) # review the printed info, any column that isn't a float has strings in it the must be fixed
print('-' * 80)
plt.figure()
for i in df:
plt.figure(figsize=(9, 5))
plt.plot(df.index, df[i])
plt.title(f'{chart["title"]}\n{i}')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.