mag*_*ber 5 python google-visualization
我无法通过python层gviz_api将color_properties像color一样传播到我的谷歌图表中.
我想创建一个带有单独颜色条的条形图,例如以下示例:https://developers.google.com/chart/interactive/docs/gallery/barchart#BarStyles
但我无法弄清楚如何通过gviz_api(http://code.google.com/p/google-visualization-python/)设置它.
我可以以任何方式提供数据,字典,列表,连音符,一次一行,只要我可以单独为条形图着色.这是我最近的非工作尝试,generate.py:
import gviz_api
def main():
# Creating the data
description = {"test" : ("string", "Test name"),
"duration" : ("number", "Duration")}
data = [dict(test="test A", duration=1000, custom_properties={"role":"color:green"}),
{"test": "test B", "duration": 4000}]
# Loading it into gviz_api.DataTable
data_table = gviz_api.DataTable(description, custom_properties={"role":"style"})
data_table.LoadData(data)
# Creating a JSon string
json = data_table.ToJSon(columns_order=("test", "duration"), order_by="test")
# Read page_template from file
f = open('template.html', 'r')
page_template = f.read()
# Putting the JSon string into the template
print page_template.format(json)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
和相应的template.html:
<html>
<script src="https://www.google.com/jsapi" type="text/javascript"></script>
<script>
google.load('visualization', '1', {{packages:['corechart']}});
google.setOnLoadCallback(drawChart);
function drawChart() {{
var options = {{
title: 'Test results',
legend: 'none',
chartArea: {{ width: "50%", height: "70%" }}
}}
var json_chart = new google.visualization.BarChart(document.getElementById('chart_div'));
var json_data = new google.visualization.DataTable({0}, 0.6);
json_chart.draw(json_data, options);
}}
</script>
<body>
<div id="chart_div"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我找到了这个问题的解决方案。
在您的描述/数据中,添加第三列,其中将包含您的财产。
description = {"test" : ("string", "Test name"),
"duration" : ("number", "Duration"), "property": ("string", '', {'role':'style'})}
data = [dict(test="test A", duration=1000, property = "color:green" ),
{"test": "test B", "duration": 4000, property = "color:red"}]
Run Code Online (Sandbox Code Playgroud)
除非列的顺序混乱,否则这应该有效。确保顺序是测试、持续时间、属性。如果是测试、属性、持续时间,它就不会起作用,并且不会出现错误。如果您最终没有首先进行测试,则会弹出域错误。
希望这可以帮助任何想要这样做的人!