數據
https://restcountries.com/v3.1/all;建議下載下來,并不是很大
import numpy as np
import matplotlib.pyplot as plt
import requests
import json
#由于訪問url過于慢;將數據下載到本地是json數據
#url='https://restcountries.com/v3.1/all'#r=requests.get(url)
#r.json()獲得文件數據
#statuscode判斷是否成功訪問filename='/Users/oommnn/Desktop/學習筆記/數據可視化30天項目/all.json'try:with open(filename) as f:data=json.load(f)except FileNotFoundError:print(f"{filename}找不到")#這是姓名的數組print(data[0]['name'])
#這是人口的消息print(data[0]['population'])results=[]
#250個國家print(len(data))
for i in range(len(data)):result={'name':data[i]['name']['common'],'population':int(data[i]['population'])}results.append(result)
print(results[:2])arr_results=np.array(results)
#列表的排序
results=sorted(results,key=lambda x: x['population'],reverse=True)
#np數組的排序;沒有直接的方法#可視化過程;使用matplotlib
x_values=[result['name'] for result in results]
y_values=[result['population'] for result in results]fig,axs=plt.subplot_mosaic([['left_top','left_top'],['left_bottom','left_bottom']],figsize=(20,15),facecolor='gray')axs['left_top'].bar(x_values[:10],y_values[:10])
axs['left_top'].set_title("Max Population about country")
axs['left_top'].set_xlabel('Country')
axs['left_top'].set_ylabel('Number/a hundred million')
axs['left_top'].set_xticks(x_values[:10],x_values[:10],rotation=45,fontsize=13)axs['left_bottom'].bar(x_values[-10:],y_values[-10:])
axs['left_bottom'].set_title("Min Population about country")
axs['left_bottom'].set_xlabel('Country')
axs['left_bottom'].set_ylabel('Number/people')
axs['left_bottom'].set_xticks(x_values[-10:],x_values[-10:],rotation=45,fontsize=13)plt.show()
總結
- 關于數組的字典排序,屬于lambda內置排序函數
- set_xticks設置刻度和字體翻轉;第一個參數是需要多少個刻度ticks,數值型代表數,字符串代表本身,第二個參數是一一對應刻度的標簽labels