2017-09-16 15 views
1

時間半、頻繁なラベルは、私はXのラベルが似ているとしますPythonのプロットX

00:00 00:30 01:00 01:30 02:00 ...... 23:30 

マイコード:

import matplotlib.pyplot as plt 
import pandas as pd 
import matplotlib.dates as mdates 
import random 

data = [random.random() for i in range(48)] 
times = pd.date_range('16-09-2017', periods=48, freq='30MIN') 

fig, ax = plt.subplots(1) 
fig.autofmt_xdate() 
plt.plot(times, data) 

xfmt = mdates.DateFormatter('%H:%M') 
ax.xaxis.set_major_formatter(xfmt) 

plt.show() 

をしかし、私のX-ラベルは次のようになります。

x-axis image

何が問題ですか?私は48個の値を持つ は、それぞれの値は、一日の半分の時間の値を表し

+0

あなたはどのように多くのX-ティックをしたいですか?すべての48のx値をプロットすると、x軸ラベルが非常に混雑します。 –

+0

48個の値すべてをプロットすることは可能ですが、プロットのサイズを大きくして読みやすくする必要があります。 – StefanK

答えて

-1

編集:私の答えはすでに受け入れられたが、正常に動作しませんでしたよう 、私は簡略化されます追加matplotlibのためのソリューションとパンダ

data = [random.random() for i in range(48)] 
times = pd.date_range('16-09-2017', periods=48, freq='30MIN') 

I:

キーが、それは次のようになりますあなたの場合は正しく

x-ticksパラメータを設定することです

hour_minutes = times.strftime('%H:%M')

1. matplotlibのソリューション

plt.figure(figsize=(12,5)) 
plt.plot(range(len(data)),data) 
# .plot(times, data) 
plt.xticks(range(len(hour_minutes)), hour_minutes, size='small', 
      rotation=45, horizontalalignment='center') 

plt.show() 

enter image description here

2.パンダソリューション

# create dataframe from arrays (not neccessary, but nice) 
df = pd.DataFrame({'values': data, 
         'hour_minutes': hour_minutes}) 

# specify size of plot 
value_plot = df.plot(figsize=(12,5), title='Value by Half-hours') 
# first set number of ticks 
value_plot.set_xticks(df.index) 
# and label them after 
value_plot.set_xticklabels(df.hour_minutes, rotation=45, size='small') 

# get the plot figure and save it 
fig = value_plot.get_figure() 
fig.savefig('value_plot.png') 
:nは両方のケースでは、あなただけの時間と分を使いたいです

enter image description here

しかし、私もあなたがMinuteLocatorを使用して明示的にすべての0と30分のためにそれを設定することができます:)

+0

ありがとうございます。それはうまくいくが、恐ろしいようだ。 :)質問に答えると、私は他のx-Labelにとどまります –

+0

あなたが見栄えを良くするためには、保存時に出力の解像度を上げる必要があります。 – StefanK

3

ここで提案された別の方法のように。

minlocator = mdates.MinuteLocator(byminute=[0,30]) 
ax.xaxis.set_major_locator(minlocator) 

そして、それをきれいにする - 余分な目盛りを取り除いて、空きスペースを埋める。

xticks = ax.get_xticks() 
ax.set_xticks(xticks[2:-2]); 
hh = pd.Timedelta('30min') 
ax.set_xlim(times[0] - hh, times[-1] + hh) 

enter image description here

+0

私はあなたのソリューションが気に入っていますが、ここで重要なのは、Figureのサイズを変更することです。そのため、x軸は読みやすくなります。 – StefanK

+0

図形のサイズを変更するのは簡単ですが、 'plt.subplots'を呼び出すときに行ってください。このように: 'fig、ax = plt.subplots(1、figsize =(14,6))' –

関連する問題