因为各种琐事和情绪耽搁了几天,今天继续将之前整理好的api数据进行可视化。
使用Pygal可视化仓库有了一些有趣的数据后,我们来进行可视化,呈现GitHub上Python项目的受欢迎程度。我们将创建一个交互式条形图:条形的高度表示项目获得了多少颗星,单击条形将进入项目在GitHub的主页。下面是首次尝试这样做:
import requestsimport pygalfrom pygal.style import LightColorizedStyle as LCS,LightenStyle as LS#执行API调用并存储响应url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'r = requests.get(url)print("Status code:",r.status_code)#将API响应存储在一个变量中response_dict = r.json()print("Total repositories:",response_dict['total_count'])#探索有关仓库的信息repo_dicts = response_dict['items']names,stars = [],[]for repo_dict in repo_dicts:names.append(repo_dict['name'])stars.append(repo_dict['stargazers_count'])#可视化my_style = LS('#333366',base_style=LCS)chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)chart.title = 'Most-Starred Python Projects on GitHub'chart.x_labels = nameschart.add('',stars)chart.render_to_file('python_repos.svg')
首先我们导入了pygal以及要应用于图表的pygal样式。接下来,打印API调用响应的状态以及找到的仓库总数,以便获悉API调用是否出现了问题。我们不再打印返回的有关项目的信息,因为通过可视化可以呈现。
我们创建了两个空列表,用于存储包含在图表中的信息。我们需要每个项目的名称,用于给条形打上标签,我们还需要知道项目获得了多少个星,用于确定条形的高度。在循环中,我们将项目的名称和获得的星数附加到这些列表的末尾。
接下来,我们使用LightenStyle类定义了一种样式,并将其基色设置为深蓝色。我们还传递了实参base_style,以使用LCS类,这里做了别名。然后,我们使用Bar()创建一个简单的条形图,并向它传递了my_style。我们还传递了另外两个样式实参,让标签绕x轴旋转45度,并隐藏了图例,因为我们只在图表中绘制一个数据系列。接下来我们给图表指定了标题。并将属性x_labels设置为列表names。运行一下~
改进Pygal图表下面来改进这个图表的样式。我们将进行多个方面的定制,因此先来稍微调整代码的结构,创建一个配置对象,在其中包含要传递给Bar()的所有定制:
import requestsimport pygalfrom pygal.style import LightColorizedStyle as LCS,LightenStyle as LS#执行API调用并存储响应url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'r = requests.get(url)print("Status code:",r.status_code)#将API响应存储在一个变量中response_dict = r.json()print("Total repositories:",response_dict['total_count'])#探索有关仓库的信息repo_dicts = response_dict['items']names,stars = [],[]for repo_dict in repo_dicts:names.append(repo_dict['name'])stars.append(repo_dict['stargazers_count'])#可视化my_style = LS('#333366',base_style=LCS)my_config = pygal.Config()my_config.x_label_rotation = 45my_config.show_legend = Falsemy_config.title_font_size = 24my_config.label_font_size = 14my_config.major_label_font_size = 18my_config.truncate_label = 15my_config.show_y_guides = Falsemy_config.width = 1000chart = pygal.Bar(my_config,style=my_style)chart.title = 'Most-Starred Python Projects on GitHub'chart.x_labels = nameschart.add('',stars)chart.render_to_file('python_repos.svg')
在样式开始,我们创建了一个Pygal类Config实例,并将其命名为my_config。通过修改my_config的属性,可定制图表的外观。接着我们设置了两个属性,x_label_rotation和show_legend,同时还设置了图表标题、副标签和主标签的字体大小。在这个图表中,副标签是x轴上的项目名以及y轴上的大部分数字。主标签是y轴上为5000整数倍的刻度:这些标签应更大,以与副标签区分开来。使用truncate_label将较长的项目名缩短为15个字符,将show_y_guides设置为false,以隐藏图表中的水平线。最后设置了自定义宽度,让图表更充分地利用浏览器中的可用空间。