그 블렌드 예가 나를 올바른 길로 인도했습니다.
import pandas as pd
from pandas import Series
from dateutil.parser import parse
from bokeh.plotting import figure
from bokeh.layouts import row
from bokeh.charts import Bar, output_file, show
from bokeh.charts.attributes import cat, color
from bokeh.charts.operations import blend
output_file("datestats.html")
그냥 몇 가지 샘플 데이터, 당신이 맞는 볼을 변경할 주시기 바랍니다. 먼저 데이터를 적절한 형식으로 바꾸어야했습니다. 그것은 당신의 날짜 형식처럼 보였다
는
# Sample data
vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
dates = ["01-01-2015", "02-01-2015", "03-01-2015", "04-01-2015",
"01-02-2015", "02-02-2015", "03-02-2015", "04-02-2015",
"01-03-2015", "02-03-2015", "03-03-2015", "04-03-2015"
]
"일 - 월 - 년"이었다 - 팬더가 제대로 인식 할 수 있도록 나는 dateutil.parser을 사용했다.
# Format data as pandas datetime objects with day-first custom
days = []
days.append(parse(x, dayfirst=True) for x in dates)
당신은 또한 월별로 그룹화 필요 - 내가 판다는, 날짜를 다운 샘플링하는 리샘플링 매달 적절한 값을 얻을하고 dataframe에 병합 사용.
# Put data into dataframe broken into min, mean, and max values each for month
ts = Series(vals, index=days[0])
firstmerge = pd.merge(ts.resample('M').min().to_frame(name="min"),
ts.resample('M').mean().to_frame(name="mean"),
left_index=True, right_index=True)
frame = pd.merge(firstmerge, ts.resample('M').max().to_frame(name="max"),
left_index=True, right_index=True)
는 보케는 차트의 X 값, discussed here 등으로 팬더 dataframe의 인덱스를 사용할 수 있지만 날짜 레이블에 대한 새 열을 추가, 그래서 그것은 날짜 값을 좋아하지 않았다. 아래의 timeseries 코멘트를보십시오 ***.
# You can use DataFrame index for bokeh x values but it doesn't like timestamp
frame['Month'] = frame.index.strftime('%m-%Y')
마지막으로 우리는 차트 작성 부분으로갑니다. 올림픽 메달 표본과 마찬가지로 Bar에게 몇 가지 인수를 전달합니다. 그러나 이것들을 가지고 놀아라. 그러나 참고 내가 차트의 바깥에 그것을 만들어서 범례를 추가했다. 데이터 포인트가 많으면 여기에 내장 된 방법과 같이 차트에서 지저분 해집니다.
이 코드를 복사/붙여 넣기하면
# Main object to render with stacking
bar = Bar(frame,
values=blend('min', 'mean', 'max',
name='values', labels_name='stats'),
label=cat(columns='Month', sort=False),
stack=cat(columns='values', sort=False),
color=color(columns='values',
palette=['SaddleBrown', 'Silver', 'Goldenrod'],
sort=True),
legend=None,
title="Statistical Values Grouped by Month",
tooltips=[('Value', '@values')]
)
# Legend info (displayed as separate chart using bokeh.layouts' row)
factors = ["min", "mean", "max"]
x = [0] * len(factors)
y = factors
pal = ['SaddleBrown', 'Silver', 'Goldenrod']
p = figure(width=100, toolbar_location=None, y_range=factors)
p.rect(x, y, color=pal, width=10, height=1)
p.xaxis.major_label_text_color = None
p.xaxis.major_tick_line_color = None
p.xaxis.minor_tick_line_color = None
# Display chart
show(row(bar, p))
, 이것은 당신이
이 표시됩니다 것입니다.
당신은 스스로를 렌더링 또는 당신이 그것을 제공하는 경우 경우 : 툴팁 (값)를 참조하기 위해 각 블록 위에 마우스를 올려.
은 내가 (색상이 마음에 와서) 수 추상적 모든 것을하지 않았다.
이
당신이 구축하고 싶었 차트 유형이지만, 스택 합계 (분 +이 + 최대를 의미) 때문에 다른 차트 스타일은 의미있는 정보를 제공하지 않습니다 더 informatively 데이터를 표시하는 것처럼 보인다. 그러나 나는 당신의 데이터가 실제로 무엇인지 모른다.
는 *** 당신은
timeseries chart을 고려할 수 있습니다. 이렇게하면 플로팅하기 전에 수행 된 논쟁의 일부가 제거 될 수 있습니다.
또한 그들을 적재 대신 grouping your bars을 고려할 수 있습니다. 그렇게하면 매월 숫자를 쉽게 시각화 할 수 있습니다.