2017-05-02 20 views
1

文字列(日付)と浮動小数点数(ミリ秒)の値の辞書を使用しています。私は棒グラフで、また下の表でデータを提示したいと思います。私は棒グラフを使用していますが、テーブルが台無しになってしまいます。私は日付と列を単一の行として欲しい。あなたが写真から見ることができるように、私は(1 coloumnの下で私は1つのセルのデータのような何かをしたいように、1つの列の下のすべてのエントリを取得Matplotlibは1行複数列の表データを作成します

time_and_dates_for_plot = {'04-26': 488.1063166666667, '04-27': 289.7289333333333, '04-28': 597.2343999999999, '04-29': 0, '04-30': 0, '05-01': 1061.958075} 

plot.bar(range(len(time_and_dates_for_plot)), time_and_dates_for_plot.values(), align='center') 
plot.xticks(range(len(time_and_dates_for_plot)), list(time_and_dates_for_plot.keys())) 
plot.xlabel('Date (s)') 
plot.ylabel('milliseconds') 
plot.grid(True) 
plot.gca().set_position((.1, .3, .8, .6)) 
col_labels = list(time_and_dates_for_plot.keys()) 
print(col_labels) 
row_labels = ['ms'] 
cell_text = [] 
val = [] 

for key in time_and_dates_for_plot.keys(): 
    val.append((time_and_dates_for_plot.get(key))) 
    cell_text.append(val) 
    val = [] 
print(cell_text) 
plot.table(cellText=cell_text, colLabels=col_labels) 
plot.show() 

Plot and table

:何かのように

辞書ですプロットデータを単に表にする)。

さらに、テーブルとグラフの間にいくつかのパディングを追加するにはどうすればよいですか?

初めて私はmatplotlibを使用していて、私は何かが欠けていると確信しています。どんな助けでも本当に感謝しています。

答えて

2

table関数では、[]の余分なペアが必要です。 ...cellText=[cell_text]... Also, you can use subplots to have a better arrangement of the plots. Here, my solution uses subplots of 2 rows with height_ratios of 8 to 1, and a hspace` PF 0.3

import matplotlib as mpl 
import matplotlib.pyplot as plt 

time_and_dates_for_plot = {'04-26': 488.1063166666667, 
          '04-27': 289.7289333333333, 
          '04-28': 597.2343999999999, 
          '04-29': 0, 
          '04-30': 0, 
          '05-01': 1061.958075} 

fig,axs = plt.subplots(figsize=(8,5),ncols=1,nrows=2, 
          gridspec_kw={'height_ratios':[8,1],'hspace':0.3}) 
ax = axs[0] 
ax.bar(range(len(time_and_dates_for_plot)), 
      time_and_dates_for_plot.values(), align='center') 
ax.set_xticks(range(len(time_and_dates_for_plot)), 
       list(time_and_dates_for_plot.keys())) 
ax.set_xlabel('Date (s)') 
ax.set_ylabel('milliseconds') 
ax.grid(True) 

col_labels = list(time_and_dates_for_plot.keys()) 
row_labels = ['ms'] 
cell_text = [] 

for key in time_and_dates_for_plot.keys(): 
    cell_text += [time_and_dates_for_plot[key]] 

ax = axs[1] 
ax.set_frame_on(False) # turn off frame for the table subplot 
ax.set_xticks([]) # turn off x ticks for the table subplot 
ax.set_yticks([]) # turn off y ticks for the table subplot 
ax.table(cellText=[cell_text], colLabels=col_labels, loc='upper center') 
plt.show() 

出力は次のようになります。

enter image description here

** UPDATE **

唯一のサブプロット、無xticklabelsを使用して、日付をソートし、 %gのより良い数字、より大きな表のセルbbox

import matplotlib as mpl 
import matplotlib.pyplot as plt 

time_and_dates_for_plot = {'04-26': 488.1063166666667, 
          '04-27': 289.7289333333333, 
          '04-28': 597.2343999999999, 
          '04-29': 0, 
          '04-30': 0, 
          '05-01': 1061.958075} 
N = len(time_and_dates_for_plot) 
colLabels = sorted(time_and_dates_for_plot.keys()) 
fig,ax = plt.subplots() 
aa = ax.bar(range(N),[time_and_dates_for_plot[x] for x in colLabels], 
        align='center') 
ax.set_xlabel('Date') 
ax.set_ylabel('milliseconds') 
ax.set_xticklabels([]) # turn off x ticks 
ax.grid(True) 

fig.subplots_adjust(bottom=0.25) # making some room for the table 

cell_text = [] 
for key in colLabels: 
    cell_text += ["%g"%time_and_dates_for_plot[key]] 

ax.table(cellText=[cell_text], colLabels=colLabels, 
        rowLabels=['ms'],cellLoc='center', 
        bbox=[0, -0.27, 1, 0.15]) 
ax.set_xlim(-0.5,N-0.5) # Helps having bars aligned with table columns 
ax.set_title("milliseconds vs Date") 
fig.savefig("Bar_graph.png") 
plt.show() 

出力:

enter image description here

** 更新:subplots_adjust **

+0

おかげで答えのためにたくさんを使用して、テーブルの作成部屋。私はいくつかの質問があります。プロットクラスからtitleメソッドとsavefigメソッドを使用するにはどうすればいいですか? plot.titleまたはplot.savefigにアクセスしようとすると、動作しません。また、axまたはfigを使用した場合と同じ結果になります。 これらの書式設定のオプションに関するドキュメントが見つかりませんでした。あなたは私にそれらを教えてくれますか?前もって感謝します。 –

+0

通常の 'import matplotlib.pyplot as plt'で' plot'の代わりに 'plt'を使うべきです。また、 'matplotlib.figure.Figure'型の変数' fig'は 'savefig'メソッドを持っています。タイトルと軸のラベルには 'ax'を使います。例えばax.set_title() –

+0

@srikbabaこの回答が後であなたの問題を解決した場合は、それを合格とマークしてください。 –

関連する問題