{"cells":[{"cell_type":"markdown","metadata":{},"source":["# 1. 数据绘图"]},{"cell_type":"markdown","metadata":{},"source":["## 1.1 二列数据绘图"]},{"cell_type":"markdown","metadata":{},"source":["根据文件中的数据绘制数据曲线,一般的做法是打开文件,读取文件中的数据到列表中,再绘制数据曲线。"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","\n","1. 打开文件创建文件对象:\n","with open('文件路径/文件名', 'r', encoding='utf-8') as 文件对象名:\n","2. 遍历文件对象\n","for line in 文件对象名:\n","3.当前行切分为列表\n","line.strip().split('分隔符')\n","4.列表元素转数值类型: float(x)\n","5.绘制曲线:plt.plot(x, y) \n","6. 显示绘制结果: plt.show() # "]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["%matplotlib inline # 使jupyter中可以使用matplotlib绘制图形"]},{"cell_type":"markdown","metadata":{},"source":["## 实例 9.4 读文件绘制数据曲线"]},{"cell_type":"markdown","metadata":{},"source":["有一包含两列数据的9.4 DOS.csv文件,两列数据分别代表x,y坐标,利用文件中的数据绘制数据曲线(数据文件可通过扫描二维码下载)。下面仅给出文件前几行数据:"]},{"cell_type":"markdown","metadata":{},"source":["\u003ca href=\"https://data.educoder.net/api/attachments/3395654?type=office\u0026disposition=inline\" target=\"_blank\"\u003e9.4 dos.csv\u003c/a\u003e\n"]},{"cell_type":"raw","metadata":{},"source":["-58.55742805,0\n","-58.54690537,0\n","-57.47359261,0.00011105\n","-57.46306993,0.000141095\n","-57.45254726,0.000178771\n","-57.44202458,0.000225883\n","......\n","20.78353541,0.000164749\n","20.79405809,0.000146059\n","20.80458076,0.000129131\n","20.81510343,0.000113849\n","20.82562611,0.000100099"]},{"cell_type":"markdown","metadata":{},"source":["欲利用文件中的数据绘制曲线,需打开并逐行读取文件中的数据。 \n","要注意读取每行数据时,行末有一个换行符“\\n”需要用replace()替换掉或用strip()函数过滤掉。 \n","读取的数据是字符型,需要转换成float()函数或eval()函数转换为数字型。 \n","再将其附加到列表中,构建分别包含x和y坐标的两个列表,再利用matplotlib绘图。 \n","绘图结果如图所示。 "]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","with open('/data/bigfiles/a2235822-b57f-414f-ace8-165906c888d1.csv', 'r', encoding='utf-8') as file: # 打开文件创建文件对象file\n"," ls = [line.strip().split(',') for line in file] # 逐行读取文件中的数据创建二维列表\n","x_ls = [float(x[0]) for x in ls] # 列表x_ls为ls子列表中序号为0的元素的浮点类型\n","y_ls = [float(x[1]) for x in ls] # 列表y_ls为ls子列表中序号为1的元素的浮点类型\n","plt.plot(x_ls, y_ls, linewidth=2) # 绘制数据曲线\n","plt.show() # 显示绘制结果"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394573?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["这种方法容易理解,但稍显繁琐,可利用列表推导式对其进行简化。 \n","打开文件后,先将每行数据去掉行末的换行符后切分为列表,存入列表ls中,再用列表推导式将ls中的元素分别放入lsx、lsy两个列表中。"]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","\n","def read_csv(file):\n"," with open(file) as data:\n"," ls = [line.strip().split(',') for line in data] # 读文件到二维列表\n"," return ls\n","\n","\n","def plot_dos(ls):\n"," x = [float(x[0]) for x in ls] # 列表推导式\n"," y = [float(x[1]) for x in ls]\n"," plt.plot(x, y) # 绘制数据曲线\n","\n","\n","if __name__ == '__main__':\n"," lst = read_csv('/data/bigfiles/a2235822-b57f-414f-ace8-165906c888d1.csv')\n"," plot_dos(lst)\n"," plt.show()"]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","# 支持中文显示\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 宋体\n","plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 -\n","\n","\n","def read_csv(file):\n"," \"\"\"接受一个文件名变量为参数,读文件,每行切分为一个子列表。\n"," 返回二维列表。\n"," \"\"\"\n"," with open(file) as data:\n"," ls = [line.strip().split(',') for line in data]\n"," return ls\n","\n","\n","def plot_dos(ls):\n"," \"\"\"接受二维列表为参数,绘制曲线,无返回值。\"\"\"\n"," x = [float(x[0]) for x in ls]\n"," y = [float(x[1]) for x in ls]\n"," plt.plot(x, y, linestyle='-', linewidth=1) # 绘制数据曲线\n","\n","\n","def draw_label():\n"," \"\"\"增加图名和轴标签\"\"\"\n"," plt.title('态密度(Density of States)曲线')\n"," plt.xlabel('能量/eV')\n"," plt.ylabel('态密度/eV')\n","\n","\n","# 函数调用与输入输出\n","if __name__ == '__main__':\n"," lst = read_csv('/data/bigfiles/a2235822-b57f-414f-ace8-165906c888d1.csv')\n"," plot_dos(lst)\n"," draw_label()\n"," plt.show()\n"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394574?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["在NumPy中,使用loadtxt函数可以方便地读取csv或txt文件,delimiter=','表示用逗号作为分隔符自动切分字段,并将数据载入NumPy数组。\n"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[],"source":["# 利用numpy读文件绘制数据曲线\n","import matplotlib.pyplot as plt\n","import numpy as np\n","\n","data = np.loadtxt('/data/bigfiles/a2235822-b57f-414f-ace8-165906c888d1.csv', delimiter=',')\n","plt.plot(data[0:, 0], data[0:, 1]) # 切片方法获取两列数据\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["对于有标题行的数据:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["plt.plot(data[1:, 0], data[1:, 1])"]},{"cell_type":"markdown","metadata":{},"source":["读数据到dataframe,用数据的列标题绘图"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["plot('xlabel', 'ylabel', data=obj)"]},{"cell_type":"raw","metadata":{},"source":["2d,Intensity,E\n","4,0,2.5\n","4.03,0,2.3\n","4.06,0,3.8\n","4.09,,4.2\n","4.12,,5.6\n","4.15,0,1.0\n","4.18,0\n","4.21,0\n","4.24,0\n","......\n","44.95,5.66224\n","44.98,6.46755\n","45.01,7.59091"]},{"cell_type":"markdown","metadata":{},"source":["\u003ca href=\"https://data.educoder.net/api/attachments/3395656?type=office\u0026disposition=inline\" target=\"_blank\"\u003eXRD_AFOtxtd.csv\u003c/a\u003e"]},{"cell_type":"markdown","metadata":{},"source":["在Pandas库中,使用read_csv()函数可以方便地读取csv或txt文件,delimiter=','表示用逗号作为分隔符自动切分字段,并将数据载入为dataframe类型。 \n","可通过列标签获取其中第 i 列数据。"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import pandas as pd\n","\n","df = pd.read_csv('/data/bigfiles/3d72af89-ec6e-49f7-a847-34151c54ce6a.csv')\n","plt.plot('2d', 'Intensity', data=df) # 根据列标题获取数据\n","plt.show() # 显示绘制结果"]},{"cell_type":"markdown","metadata":{},"source":["在Pandas库中,使用read_csv()函数可以方便地读取csv或txt文件,delimiter=','表示用逗号作为分隔符自动切分字段,并将数据载入为dataframe类型。 \n","可通过dataframe.iloc[:,i]获取其中第 i 列数据。"]},{"cell_type":"code","execution_count":7,"metadata":{},"outputs":[],"source":["# 利用pandas读文件绘制数据曲线\n","import matplotlib.pyplot as plt\n","import pandas as pd\n","\n","df = pd.read_csv('/data/bigfiles/3d72af89-ec6e-49f7-a847-34151c54ce6a.csv')\n","plt.plot(df.iloc[1:, 0], df.iloc[1:, 1]) # 索引两列数据为数组\n","plt.show() # 显示绘制结果"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394575?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["## 1.2 多列数据绘图"]},{"cell_type":"markdown","metadata":{},"source":["当数据文件中包括多列数据时,可用循环的方法,每次读两列数据绘图,重复执行,完成所有数据的读取和绘制。"]},{"cell_type":"markdown","metadata":{},"source":["## 实例 9.5 多列数据绘图"]},{"cell_type":"markdown","metadata":{},"source":["有一包含多列数据的PDOS.csv文件,8列数据分别代表4组x,y坐标,利用文件中的数据绘制数据曲线(数据文件可通过扫描二维码下载)。 \n","下面仅给出文件部分数据:"]},{"cell_type":"raw","metadata":{},"source":["-58.55742805,0,-58.55742805,0,-58.55742805,0,-58.55742805,0\n","-58.54690537,0,-58.54690537,0,-58.54690537,0,-58.54690537,0\n","-57.47359261,0.000110663,-57.16843505,0.000112165,-57.04216296,0.000102657,-57.47359261,0.00011105\n","-57.46306993,0.000140603,-57.15791238,0.000131517,-57.03164029,0.000116436,-57.46306993,0.000141095\n","-57.45254726,0.000178149,-57.14738971,0.000153782,-57.02111761,0.0001317,-57.45254726,0.000178771\n","......\n","18.15286686,0.034078085,17.67934652,1.146470801,20.6256953,0.000119975,16.14303609,0.670546987\n","18.16338954,0.031011768,17.6898692,1.125145182,20.63621797,0.000110874,16.15355876,0.673103152\n","18.17391221,0.028196187,17.70039187,1.102515945,20.64674065,0.000102179,16.16408144,0.67741828\n","18.18443488,0.025618465,17.71091454,1.078811693,20.65726332,9.39E-05,16.17460411,0.683354996\n","18.19495756,0.023266078,17.72143722,1.054125932,22.33036852,0,16.18512679,0.690765294"]},{"cell_type":"markdown","metadata":{},"source":["\u003ca href=\"https://data.educoder.net/api/attachments/3395655?type=office\u0026disposition=inline\" target=\"_blank\"\u003ePDOS.csv\u003c/a\u003e"]},{"cell_type":"markdown","metadata":{},"source":["用循环的方法读取数据比较容易理解,每次读取相邻的2列数据作为一组坐标,取消10和11行的注释,可获得区域放大的效果,绘图结果如图9.11所示:"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","\n","with open('/data/bigfiles/8ce0dbd0-ce9e-4c3b-b869-529febcdba74.csv', 'r', encoding='utf-8') as file:\n"," ls = [line.strip().split(',') for line in file] # 逐行读取文件中的数据创建二维列表\n"," \n","for i in range(0, 8, 2): # i取偶数0,2,4,6,i+1的值分别为1,3,5,7\n"," x_ls = [float(x[i]) for x in ls] # 列表x_ls为ls子列表中序号为i的元素的浮点类型\n"," y_ls = [float(x[i+1]) for x in ls] # 列表y_ls为ls子列表中序号为i+1的元素的浮点类型\n"," plt.plot(x_ls, y_ls, linewidth=2) # 绘制当前数据的曲线,颜色通过索引获得\n","\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["10和11行的的作用是获得区域放大的效果:"]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","\n","with open('/data/bigfiles/8ce0dbd0-ce9e-4c3b-b869-529febcdba74.csv', 'r', encoding='utf-8') as file:\n"," ls = [line.strip().split(',') for line in file] # 逐行读取文件中的数据创建二维列表\n","for i in range(0, 8, 2): # i取偶数0,2,4,6,i+1的值分别为1,3,5,7\n"," x_ls = [float(x[i]) for x in ls] # 列表x_ls为ls子列表中序号为i的元素的浮点类型\n"," y_ls = [float(x[i+1]) for x in ls] # 列表y_ls为ls子列表中序号为i+1的元素的浮点类型\n"," plt.plot(x_ls, y_ls, linewidth=2) # 绘制当前数据的曲线,颜色通过索引获得\n"," \n","plt.xlim(-5, 5) # 设置x轴的上下限,获得区域放大的曲线\n","plt.ylim(-0.5, 8) # 设置y轴的上下限,获得区域放大的曲线\n","\n","plt.show()"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394576?type=image/png\"\u003e\n","\u003cimg src=\"https://www.educoder.net/api/attachments/3394577?type=image/png\"\u003e\n","\u003cimg src=\"https://www.educoder.net/api/attachments/3394579?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["\u003ca href=\"https://data.educoder.net/api/attachments/3395653?type=office\u0026disposition=inline\" target=\"_blank\"\u003e9.5 PDOS.csv\u003c/a\u003e"]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," cl = ['cyan', 'green', 'red', 'blue'] # 创建颜色列表\n"," sty = ['-', '--', ':', '-.']\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," plt.plot(x, y, color=cl[i], linestyle=sty[i],linewidth=3) # cl[i]根据i值取颜色\n","\n","\n","def draw_label(): # 加图名和轴标签\n"," plt.title('态密度(Density of States)曲线')\n"," plt.xlabel('能量/eV')\n"," plt.ylabel('分波态密度/eV')\n"," \n"," \n","def zoom_area():\n"," \"\"\"只显示横坐标在-5到5之间的区域,局部放大,纵坐标根据曲线的最大值来设定为-0.5到8\"\"\"\n"," plt.xlim(-5, 5) # 设置x轴的上下限,获得区域放大的曲线\n"," plt.ylim(-0.5, 8) # 设置y轴的上下限,获得区域放大的曲线\n","\n"," \n","if __name__ == '__main__':\n"," file = '/data/bigfiles/42a2fedc-9698-4455-a8db-8a0448c4483e.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," draw_label()\n"," zoom_area()\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["### 1.3 numpy读文件,利用数组绘图"]},{"cell_type":"code","execution_count":18,"metadata":{},"outputs":[],"source":["# 利用numpy读文件绘制数据曲线\n","import matplotlib.pyplot as plt\n","import numpy as np\n","\n","data = np.loadtxt('/data/bigfiles/42a2fedc-9698-4455-a8db-8a0448c4483e.csv',delimiter=',')\n","for i in range(4):\n"," plt.plot(data[0:, 2*i], data[0:, 2*i+1]) # 切片方法获取两列数据\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["### 1.4 pandas读文件,利用dataframe绘图"]},{"cell_type":"code","execution_count":19,"metadata":{},"outputs":[],"source":["# 利用pandas读文件绘制数据曲线\n","import matplotlib.pyplot as plt\n","import pandas as pd\n","\n","data = pd.read_csv('/data/bigfiles/42a2fedc-9698-4455-a8db-8a0448c4483e.csv')\n","for i in range(4):\n"," plt.plot(data.iloc[0:, 2*i], data.iloc[0:, 2*i+1]) # 切片方法获取两列数据\n","plt.show()"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394580?type=image/png\"\u003e"]},{"cell_type":"code","execution_count":20,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," plt.subplot(211) # 分2x1,小于10的数可合成3位数\n"," plt.plot(x, y)\n"," plt.title('态密度(Density of States)曲线')\n"," plt.ylabel('分波态密度/eV')\n","\n","\n","def zoom_in_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," sty = ['-', '--', ':', '-.']\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst if -5 \u003c float(ls[2 * i]) \u003c 5] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst if -5 \u003c float(ls[2 * i]) \u003c 5] # 生成y的列表\n"," plt.subplot(212) # 分2x1,小于10的数可合成3位数\n"," plt.plot(x, y, linestyle=sty[i]) # cl[i]根据i值取颜色\n"," plt.xlabel('能量/eV')\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/42a2fedc-9698-4455-a8db-8a0448c4483e.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," zoom_in_dos(dos_in_lst)\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394581?type=image/png\"\u003e"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["def zoom_in_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," sty = ['-', '--', ':', '-.']\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," plt.subplot(212) # 分2x1,小于10的数可合成3位数\n"," plt.plot(x, y, color=cl[i], linestyle=sty[i]) # cl[i]根据i值取颜色\n"," plt.xlim(-5, 5) # 设置横轴的上下限\n"," plt.ylim(-0.5, 7.5) # 设置纵轴的上下限\n"," plt.xlabel('能量/eV')"]},{"cell_type":"markdown","metadata":{},"source":["### 1.5 两列数据分段绘图"]},{"cell_type":"markdown","metadata":{},"source":["## 实例 9.7 两列数据绘制多条曲线"]},{"cell_type":"markdown","metadata":{},"source":["有一个数据文件band.txt,其中包括两列数据,分别代表坐标x,y的值,数据间用制表符分隔('\\t'),其中x值数据从0变化到1时表示一条曲线,整个文件包含多组这样的数据,请读取这个文件的数据并绘制相应的曲线。"]},{"cell_type":"raw","metadata":{},"source":["0\t-17.0916786423819\n","0.0211944262814081\t-17.0751964353257\n","0.0423888474761543\t-17.0264812561439\n","0.0635832737575624\t-16.9477206279502\n","0.0847777000389705\t-16.8426201969397\n","0.105972121233717\t-16.7164274062928\n","......\n","0.933251465270729\t-16.1766441729898\n","0.955500978923773\t-16.0688718562406\n","0.977750486346955\t-15.9960071184942\n","1\t-15.9701767127752\n","0\t-16.1625663637734\n","0.0211944262814081\t-16.1595137907805\n","0.0423888474761543\t-16.1505503610793\n","0.0635832737575624\t-16.1361511854246\n","0.0847777000389705\t-16.1171364149128\n","......\n","0.933251465270729\t-16.0104068383765\n","0.955500978923773\t-15.9889860373421\n","0.977750486346955\t-15.9750252370744\n","1\t-15.9701758964337\n","0\t-15.9087935461524\n","0.0211944262814081\t-15.916396678796\n","0.0423888474761543\t-15.9373388315959\n","0.0635832737575624\t-15.9665271220299\n","0.0847777000389705\t-15.9972065962757\n","......\n","0.933251465270729\t17.4571661619832\n","0.955500978923773\t17.68681499974\n","0.977750486346955\t17.7927935420937\n","1\t17.811444496409"]},{"cell_type":"markdown","metadata":{},"source":["[9.7 band.txt](https://data.educoder.net/api/attachments/3395651?type=text/plain)"]},{"cell_type":"markdown","metadata":{},"source":["参考前述方法,将一条曲线的数据附加到一组列表中。 \n","因每条曲线的x值都是从0逐渐增加到1为止,因此可查看保存x值数据的列表的最后一个元素值是否是1,当该元素值为1时,利用列表中的数据绘制一条曲线。 然后清空列表,读取并附加下一组数据。 \n","重复操作,直至所有数据读取完毕。"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split('\\t') for line in fr] # 数据转列表\n"," # data_lst = [line.strip().split() for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_label(): # 加图名和轴标签\n"," plt.title('能带曲线')\n"," plt.ylabel('Energy/eV')\n","\n","\n","def draw_band(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," x, y = [], []\n"," for xy in data_lst:\n"," x.append(float(xy[0])) # 将数据转为浮点型附加到列表中\n"," y.append(float(xy[1]))\n"," if x[-1] == 1: # 列表最后一个元素为1时\n"," plt.plot(x, y, '-',linewidth=2) # 绘制曲线\n"," x, y = [], [] # 清空列表,准备接收下一条曲线的数据\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/26d50dd0-810a-4d1d-907f-af703bb33cd9.txt'\n"," data_in_lst = read_csv(file)\n"," draw_band(data_in_lst)\n"," draw_label()\n"," plt.show()"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394583?type=image/png\"\u003e"]},{"cell_type":"code","execution_count":24,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split() for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_label():\n"," \"\"\"加图名和轴标签\"\"\"\n"," plt.title('能带曲线')\n"," plt.ylabel('Energy/eV')\n","\n","\n","def draw_band(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," x, y = [], []\n"," for xy in data_lst:\n"," x.append(float(xy[0])) # 将数据转为浮点型附加到列表中\n"," y.append(float(xy[1]))\n"," if x[-1] == 1: # 列表最后一个元素为1时\n"," plt.plot(x, y, '-') # 绘制曲线\n"," x, y = [], [] # 清空列表,准备接收下一条曲线的数据\n"," \n","def draw_line():\n"," \"\"\"绘制区间线\"\"\"\n"," xtick = [0, 0.25, 0.43, 0.69, 1]\n"," plt.xticks(xtick) # 横轴刻度\n"," for i in xtick: # 在刻度处绘制纵向破折线\n"," plt.axvline(i, linestyle='--', c='gray')\n"," plt.axhline(0, linestyle='--', c='gray') # 绘制水平线\n"," \n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/26d50dd0-810a-4d1d-907f-af703bb33cd9.txt'\n"," data_in_lst = read_csv(file)\n"," plt.subplot(121) # 一行两列第一个位置绘图\n"," draw_band(data_in_lst) # 绘制完整数据图\n"," draw_label()\n"," draw_line()\n"," plt.subplot(122) # 一行两列第二个位置绘图\n"," draw_band(data_in_lst) # 绘制完整数据图\n"," plt.ylim(-5, 5) # 显示纵坐标值在-5到5之间部分\n"," draw_label()\n"," draw_line()\n"," plt.show()\n"]},{"cell_type":"code","execution_count":34,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split() for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_label():\n"," \"\"\"加图名和轴标签\"\"\"\n"," plt.title('能带曲线')\n"," plt.ylabel('Energy/eV')\n","\n","\n","def draw_band(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," x, y = [], []\n"," for xy in data_lst:\n"," x.append(float(xy[0])) # 将数据转为浮点型附加到列表中\n"," y.append(float(xy[1]))\n"," if x[-1] == 1: # 列表最后一个元素为1时\n"," plt.plot(x, y, '-') # 绘制曲线\n"," x, y = [], [] # 清空列表,准备接收下一条曲线的数据\n"," \n","def draw_line():\n"," \"\"\"绘制区间线\"\"\"\n"," xtick = [0, 0.25, 0.43, 0.69, 1]\n"," plt.xticks(xtick) # 横轴刻度\n"," for i in xtick: # 在刻度处绘制纵向破折线\n"," plt.axvline(i, linestyle='--', c='gray')\n"," plt.axhline(0, linestyle='--', c='gray') # 绘制水平线\n"," \n","def zoom_area(m,n,data_lst):\n"," \"\"\"接收二维列表为参数,只绘制满足区间条件的数据曲线,避免绘制的曲线不完整。\"\"\"\n"," lsx, lsy = [], []\n"," for x,y in data_lst:\n"," if m\u003c=float(y)\u003c=n:\n"," lsx.append(float(x)) # 将数据转为浮点型附加到列表中\n"," lsy.append(float(y))\n"," if lsx[-1] == 1: # 列表最后一个元素为1时\n"," plt.plot(lsx, lsy, '-') # 绘制曲线\n"," lsx, lsy = [], [] # 清空列表,准备接收下一条曲线的数据\n"," \n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/26d50dd0-810a-4d1d-907f-af703bb33cd9.txt'\n"," data_in_lst = read_csv(file)\n"," plt.subplot(121) # 一行两列第一个位置绘图\n"," draw_band(data_in_lst) # 绘制完整数据图\n"," draw_label()\n"," draw_line()\n"," plt.subplot(122) # 一行两列第二个位置绘图\n"," zoom_area(-5,5,data_in_lst)\n"," draw_label()\n"," draw_line()\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394584?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["### 1.6 网络数据绘图"]},{"cell_type":"markdown","metadata":{},"source":["## 实例9.8 TIOBE 程序语言排行榜曲线"]},{"cell_type":"markdown","metadata":{},"source":["TIOBE排行榜 是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。 \n","TIOBE开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程度的有效指标。 \n","该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的。观察认为,该指数反应的虽并非当前最流行或应用最广的语言,但对世界范围内开发语言的走势仍具有重要参考意义。"]},{"cell_type":"markdown","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394587?type=image/png\"\u003e"]},{"cell_type":"markdown","metadata":{},"source":["网页上右键查看网页源代码,搜索“series: ”,可看到数据:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[" series: [\n"," \t{name : 'Python',data : [[Date.UTC(2001, 5, 30), 1.25], [Date.UTC(2001, 6, 30), 1.13], [Date.UTC(2001, 7, 30), 1.20], [Date.UTC(2001, 8, 28), 1.17], [Date.UTC(2001, 9, 26), 1.28], [Date.UTC(2001, 10, 28), 1.23], [Date.UTC(2001, 11, 31), 1.04], [Date.UTC(2002, 0, 30), 1.02], [Date.UTC(2002, 1, 27), 0.99], [Date.UTC(2002, 2, 29), 0.99], [Date.UTC(2002, 3, 29), 1.07], [Date.UTC(2002, 4, 29), 1.06], [Date.UTC(2002, 5, 29), 1.13], [Date.UTC(2002, 6, 31), 1.08], [Date.UTC(2002, 7, 29), 1.22], [Date.UTC(2002, 8, 29), 1.08], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.00], [Date.UTC(2002, 11, 31), 1.00], [Date.UTC(2003, 0, 31), 1.03], [Date.UTC(2003, 1, 28), 0.97], [Date.UTC(2003, 2, 31), 0.99], [Date.UTC(2003, 3, 30), 1.01], [Date.UTC(2003, 4, 30), 1.16], [Date.UTC(2003, 5, 30), 1.28], [Date.UTC(2003, 6, 31), 1.30], [Date.UTC(2003, 7, 31), 1.42], [Date.UTC(2003, 8, 30), 1.49], [Date.UTC(2003, 9, 31), 1.77], [Date.UTC(2003, 10, 30), 1.10], [Date.UTC(2003, 11, 31), 1.13], [Date.UTC(2004, 0, 31), 1.01], [Date.UTC(2004, 1, 29), 1.02], [Date.UTC(2004, 2, 31), 1.01], [Date.UTC(2004, 3, 30), 4.57], [Date.UTC(2004, 4, 30), 6.58], [Date.UTC(2004, 5, 30), 4.96], [Date.UTC(2004, 6, 31), 4.70], [Date.UTC(2004, 7, 30), 5.60], [Date.UTC(2004, 8, 30), 4.44], [Date.UTC(2004, 9, 31), 5.20], [Date.UTC(2004, 10, 30), 3.03], [Date.UTC(2004, 11, 31), 2.84], [Date.UTC(2005, 0, 31), 2.51], [Date.UTC(2005, 1, 28), 2.42], [Date.UTC(2005, 2, 31), 2.70], [Date.UTC(2005, 3, 30), 2.48], [Date.UTC(2005, 4, 31), 2.80], [Date.UTC(2005, 5, 30), 2.52], [Date.UTC(2005, 6, 31), 2.88], [Date.UTC(2005, 7, 31), 3.03], [Date.UTC(2005, 8, 30), 2.88], [Date.UTC(2005, 11, 3), 2.68], [Date.UTC(2006, 0, 4), 2.60], [Date.UTC(2006, 1, 2), 2.67], [Date.UTC(2006, 2, 1), 3.09], [Date.UTC(2006, 3, 2), 2.76], [Date.UTC(2006, 4, 1), 3.04], [Date.UTC(2006, 5, 1), 3.46], [Date.UTC(2006, 6, 2), 3.02], [Date.UTC(2006, 7, 2), 3.07], [Date.UTC(2006, 8, 2), 3.14], [Date.UTC(2006, 9, 1), 3.47], [Date.UTC(2006, 10, 2), 3.64], [Date.UTC(2006, 11, 1), 3.76], [Date.UTC(2007, 0, 2), 3.50], [Date.UTC(2007, 1, 3), 3.57], [Date.UTC(2007, 2, 3), 3.90], [Date.UTC(2007, 3, 1), 3.81], [Date.UTC(2007, 4, 5), 3.78], [Date.UTC(2007, 5, 2), 3.16], [Date.UTC(2007, 6, 2), 3.02], [Date.UTC(2007, 7, 5), 2.75], [Date.UTC(2007, 8, 2), 3.03], [Date.UTC(2007, 9, 4), 3.43], [Date.UTC(2007, 10, 4), 4.23], [Date.UTC(2007, 11, 3), 4.70], [Date.UTC(2008, 0, 3), 5.54], [Date.UTC(2008, 1, 7), 4.76], [Date.UTC(2008, 5, 1), 4.90], [Date.UTC(2008, 6, 2), 4.97], [Date.UTC(2008, 7, 3), 4.98], [Date.UTC(2008, 8, 3), 5.01], [Date.UTC(2008, 9, 6), 4.56], [Date.UTC(2008, 10, 2), 5.14], [Date.UTC(2008, 11, 3), 4.17], [Date.UTC(2009, 0, 2), 4.73], [Date.UTC(2009, 1, 1), 4.57], [Date.UTC(2009, 2, 5), 5.18], [Date.UTC(2009, 3, 7), 6.08], [Date.UTC(2009, 4, 1), 5.55], [Date.UTC(2009, 5, 4), 4.76], [Date.UTC(2009, 6, 2), 4.43], [Date.UTC(2009, 7, 1), 4.49], [Date.UTC(2009, 8, 5), 3.93], [Date.UTC(2009, 9, 2), 3.90], [Date.UTC(2009, 10, 2), 4.67], [Date.UTC(2009, 11, 2), 5.19], [Date.UTC(2010, 0, 5), 4.45], [Date.UTC(2010, 1, 7), 4.31], [Date.UTC(2010, 2, 7), 4.23], [Date.UTC(2010, 3, 5), 4.21], [Date.UTC(2010, 4, 15), 4.10], [Date.UTC(2010, 6, 6), 4.22], [Date.UTC(2010, 6, 30), 4.22], [Date.UTC(2010, 8, 11), 4.58], [Date.UTC(2010, 9, 2), 4.86], [Date.UTC(2010, 10, 3), 5.68], [Date.UTC(2010, 11, 7), 6.48], [Date.UTC(2011, 0, 2), 6.26], [Date.UTC(2011, 1, 8), 7.04], [Date.UTC(2011, 2, 8), 5.74], [Date.UTC(2011, 3, 3), 4.93], [Date.UTC(2011, 4, 2), 4.58], [Date.UTC(2011, 5, 5), 3.90], [Date.UTC(2011, 5, 27), 3.90], [Date.UTC(2011, 6, 8), 3.58], [Date.UTC(2011, 7, 3), 3.41], [Date.UTC(2011, 8, 10), 4.00], [Date.UTC(2011, 9, 9), 3.94], [Date.UTC(2011, 10, 7), 3.62], [Date.UTC(2011, 11, 4), 3.49], [Date.UTC(2012, 0, 8), 3.21], [Date.UTC(2012, 1, 5), 3.15], [Date.UTC(2012, 2, 11), 3.29], [Date.UTC(2012, 3, 8), 3.66], [Date.UTC(2012, 4, 9), 3.82], [Date.UTC(2012, 5, 10), 3.85], [Date.UTC(2012, 6, 4), 4.00], [Date.UTC(2012, 7, 10), 3.88], [Date.UTC(2012, 8, 2), 3.86], [Date.UTC(2012, 9, 5), 3.90], [Date.UTC(2012, 10, 4), 4.06], [Date.UTC(2012, 11, 2), 3.85], [Date.UTC(2013, 0, 5), 4.17], [Date.UTC(2013, 1, 8), 4.95], [Date.UTC(2013, 2, 11), 4.39], [Date.UTC(2013, 3, 7), 4.44], [Date.UTC(2013, 4, 8), 4.32], [Date.UTC(2013, 5, 9), 4.18], [Date.UTC(2013, 6, 7), 4.03], [Date.UTC(2013, 6, 12), 4.03], [Date.UTC(2013, 7, 4), 3.60], [Date.UTC(2013, 8, 11), 3.17], [Date.UTC(2013, 9, 10), 3.11], [Date.UTC(2013, 10, 9), 3.11], [Date.UTC(2013, 11, 6), 2.21], [Date.UTC(2014, 0, 1), 2.37], [Date.UTC(2014, 1, 8), 2.16], [Date.UTC(2014, 2, 3), 2.02], [Date.UTC(2014, 3, 10), 1.99], [Date.UTC(2014, 4, 7), 3.06], [Date.UTC(2014, 5, 8), 2.71], [Date.UTC(2014, 6, 6), 2.66], [Date.UTC(2014, 7, 11), 3.12], [Date.UTC(2014, 8, 1), 2.78], [Date.UTC(2014, 9, 3), 2.33], [Date.UTC(2014, 10, 8), 2.59], [Date.UTC(2014, 11, 7), 2.29], [Date.UTC(2015, 0, 6), 2.61], [Date.UTC(2015, 1, 5), 2.88], [Date.UTC(2015, 2, 7), 2.61], [Date.UTC(2015, 3, 13), 2.69], [Date.UTC(2015, 4, 13), 3.72], [Date.UTC(2015, 5, 6), 4.00], [Date.UTC(2015, 6, 12), 4.26], [Date.UTC(2015, 7, 6), 4.07], [Date.UTC(2015, 8, 5), 3.66], [Date.UTC(2015, 9, 4), 4.51], [Date.UTC(2015, 10, 7), 3.77], [Date.UTC(2015, 11, 4), 4.43], [Date.UTC(2016, 0, 2), 3.85], [Date.UTC(2016, 1, 2), 4.18], [Date.UTC(2016, 2, 3), 4.26], [Date.UTC(2016, 3, 7), 3.33], [Date.UTC(2016, 4, 6), 3.79], [Date.UTC(2016, 5, 5), 3.90], [Date.UTC(2016, 6, 4), 4.17], [Date.UTC(2016, 7, 6), 4.40], [Date.UTC(2016, 8, 8), 4.30], [Date.UTC(2016, 9, 7), 3.77], [Date.UTC(2016, 10, 5), 3.57], [Date.UTC(2016, 11, 4), 4.24], [Date.UTC(2017, 0, 7), 3.46], [Date.UTC(2017, 1, 8), 4.04], [Date.UTC(2017, 2, 7), 3.92], [Date.UTC(2017, 3, 9), 3.46], [Date.UTC(2017, 4, 6), 3.55], [Date.UTC(2017, 5, 3), 4.33], [Date.UTC(2017, 6, 7), 3.54], [Date.UTC(2017, 7, 2), 3.69], [Date.UTC(2017, 8, 6), 2.98], [Date.UTC(2017, 9, 5), 3.80], [Date.UTC(2017, 10, 12), 4.48], [Date.UTC(2017, 11, 9), 3.78], [Date.UTC(2018, 0, 3), 4.68], [Date.UTC(2018, 1, 8), 5.17], [Date.UTC(2018, 2, 7), 5.87], [Date.UTC(2018, 3, 1), 5.80], [Date.UTC(2018, 4, 6), 5.19], [Date.UTC(2018, 5, 10), 5.76], [Date.UTC(2018, 6, 7), 6.36], [Date.UTC(2018, 7, 1), 6.99], [Date.UTC(2018, 8, 3), 7.65], [Date.UTC(2018, 9, 5), 7.16], [Date.UTC(2018, 10, 8), 7.68], [Date.UTC(2018, 11, 2), 8.38], [Date.UTC(2019, 0, 4), 8.29], [Date.UTC(2019, 1, 6), 7.57], [Date.UTC(2019, 2, 2), 8.26], [Date.UTC(2019, 3, 7), 8.17], [Date.UTC(2019, 4, 4), 7.83], [Date.UTC(2019, 5, 9), 8.53], [Date.UTC(2019, 6, 6), 9.26], [Date.UTC(2019, 7, 5), 10.02], [Date.UTC(2019, 8, 9), 9.87], [Date.UTC(2019, 9, 5), 9.09], [Date.UTC(2019, 10, 3), 9.84], [Date.UTC(2019, 11, 6), 10.31], [Date.UTC(2020, 0, 5), 9.70], [Date.UTC(2020, 1, 4), 9.35], [Date.UTC(2020, 2, 4), 10.11], [Date.UTC(2020, 3, 2), 9.31], [Date.UTC(2020, 4, 2), 9.12], [Date.UTC(2020, 5, 1), 8.36], [Date.UTC(2020, 6, 4), 9.09], [Date.UTC(2020, 7, 2), 9.69], [Date.UTC(2020, 8, 6), 10.47], [Date.UTC(2020, 9, 4), 11.28], [Date.UTC(2020, 10, 3), 12.12], [Date.UTC(2020, 11, 3), 12.21], [Date.UTC(2021, 0, 2), 11.72], [Date.UTC(2021, 1, 6), 10.86], [Date.UTC(2021, 2, 4), 10.31], [Date.UTC(2021, 3, 4), 11.03], [Date.UTC(2021, 4, 2), 11.87], [Date.UTC(2021, 5, 5), 11.84], [Date.UTC(2021, 6, 4), 10.96], [Date.UTC(2021, 7, 3), 11.86], [Date.UTC(2021, 8, 11), 11.67], [Date.UTC(2021, 9, 6), 11.27], [Date.UTC(2021, 10, 6), 11.77], [Date.UTC(2021, 11, 5), 12.90]]}, {name : 'C',data : [[Date.UTC(2001, 5, 30), 20.24], [Date.UTC(2001, 6, 30), 20.77], [Date.UTC(2001, 7, 30), 20.75], [Date.UTC(2001, 8, 28), 20.77], [Date.UTC(2001, 9, 26), 19.75], [Date.UTC(2001, 10, 28), 19.21], [Date.UTC(2001, 11, 31), 20.14], [Date.UTC(2002, 0, 30), 18.83], [Date.UTC(2002, 1, 27), 19.89], [Date.UTC(2002, 2, 29), 19.85], [Date.UTC(2002, 3, 29), 19.82], [Date.UTC(2002, 4, 29), 19.99], [Date.UTC(2002, 5, 29), 19.57], [Date.UTC(2002, 6, 31), 19.25], [Date.UTC(2002, 7, 29), 18.16], [Date.UTC(2002, 8, 29), 18.70], [Date.UTC(2002, 9, 30), 18.73], [Date.UTC(2002, 10, 29), 17.50], [Date.UTC(2002, 11, 31), 17.26], [Date.UTC(2003, 0, 31), 18.25], [Date.UTC(2003, 1, 28), 18.54], [Date.UTC(2003, 2, 31), 17.21], [Date.UTC(2003, 3, 30), 18.02], [Date.UTC(2003, 4, 30), 18.50], [Date.UTC(2003, 5, 30), 18.52], [Date.UTC(2003, 6, 31), 17.97], [Date.UTC(2003, 7, 31), 17.78], [Date.UTC(2003, 8, 30), 18.31], [Date.UTC(2003, 9, 31), 17.00], [Date.UTC(2003, 10, 30), 18.47], [Date.UTC(2003, 11, 31), 18.60], [Date.UTC(2004, 0, 31), 18.20], [Date.UTC(2004, 1, 29), 18.93], [Date.UTC(2004, 2, 31), 17.75], [Date.UTC(2004, 3, 30), 17.95], [Date.UTC(2004, 4, 30), 18.29], [Date.UTC(2004, 5, 30), 17.14], [Date.UTC(2004, 6, 31), 16.33], [Date.UTC(2004, 7, 30), 17.12], [Date.UTC(2004, 8, 30), 18.17], [Date.UTC(2004, 9, 31), 17.99], [Date.UTC(2004, 10, 30), 19.70], [Date.UTC(2004, 11, 31), 20.71], [Date.UTC(2005, 0, 31), 19.82], [Date.UTC(2005, 1, 28), 19.47], [Date.UTC(2005, 2, 31), 18.63], [Date.UTC(2005, 3, 30), 18.52], [Date.UTC(2005, 4, 31), 19.37], [Date.UTC(2005, 5, 30), 19.85], [Date.UTC(2005, 6, 31), 19.47], [Date.UTC(2005, 7, 31), 19.16], [Date.UTC(2005, 8, 30), 18.77], [Date.UTC(2005, 11, 3), 19.63], [Date.UTC(2006, 0, 4), 19.01], [Date.UTC(2006, 1, 2), 18.33], [Date.UTC(2006, 2, 1), 17.79], [Date.UTC(2006, 3, 2), 17.69], [Date.UTC(2006, 4, 1), 17.69], [Date.UTC(2006, 5, 1), 18.25], [Date.UTC(2006, 6, 2), 17.83], [Date.UTC(2006, 7, 2), 17.43], [Date.UTC(2006, 8, 2), 18.06], [Date.UTC(2006, 9, 1), 17.66], [Date.UTC(2006, 10, 2), 17.20], [Date.UTC(2006, 11, 1), 16.62], [Date.UTC(2007, 0, 2), 15.81], [Date.UTC(2007, 1, 3), 16.10], [Date.UTC(2007, 2, 3), 15.63], [Date.UTC(2007, 3, 1), 14.94], [Date.UTC(2007, 4, 5), 15.15], [Date.UTC(2007, 5, 2), 15.97], [Date.UTC(2007, 6, 2), 16.36], [Date.UTC(2007, 7, 5), 15.70], [Date.UTC(2007, 8, 2), 14.91], [Date.UTC(2007, 9, 4), 14.59], [Date.UTC(2007, 10, 4), 13.97], [Date.UTC(2007, 11, 3), 13.17], [Date.UTC(2008, 0, 3), 13.92], [Date.UTC(2008, 1, 7), 14.86], [Date.UTC(2008, 5, 1), 15.51], [Date.UTC(2008, 6, 2), 15.95], [Date.UTC(2008, 7, 3), 16.18], [Date.UTC(2008, 8, 3), 15.38], [Date.UTC(2008, 9, 6), 15.57], [Date.UTC(2008, 10, 2), 15.28], [Date.UTC(2008, 11, 3), 15.02], [Date.UTC(2009, 0, 2), 15.93], [Date.UTC(2009, 1, 1), 15.84], [Date.UTC(2009, 2, 5), 15.86], [Date.UTC(2009, 3, 7), 15.47], [Date.UTC(2009, 4, 1), 16.13], [Date.UTC(2009, 5, 4), 16.78], [Date.UTC(2009, 6, 2), 17.32], [Date.UTC(2009, 7, 1), 17.22], [Date.UTC(2009, 8, 5), 16.86], [Date.UTC(2009, 9, 2), 16.84], [Date.UTC(2009, 10, 2), 17.32], [Date.UTC(2009, 11, 2), 16.28], [Date.UTC(2010, 0, 5), 16.22], [Date.UTC(2010, 1, 7), 16.60], [Date.UTC(2010, 2, 7), 17.28], [Date.UTC(2010, 3, 5), 18.06], [Date.UTC(2010, 4, 15), 18.19], [Date.UTC(2010, 6, 6), 18.48], [Date.UTC(2010, 6, 30), 17.87], [Date.UTC(2010, 8, 11), 17.15], [Date.UTC(2010, 9, 2), 17.18], [Date.UTC(2010, 10, 3), 16.72], [Date.UTC(2010, 11, 7), 16.08], [Date.UTC(2011, 0, 2), 15.82], [Date.UTC(2011, 1, 8), 14.99], [Date.UTC(2011, 2, 8), 15.26], [Date.UTC(2011, 3, 3), 16.16], [Date.UTC(2011, 4, 2), 16.17], [Date.UTC(2011, 5, 5), 16.28], [Date.UTC(2011, 5, 27), 16.28], [Date.UTC(2011, 6, 8), 17.28], [Date.UTC(2011, 7, 3), 17.39], [Date.UTC(2011, 8, 10), 18.00], [Date.UTC(2011, 9, 9), 17.71], [Date.UTC(2011, 10, 7), 17.32], [Date.UTC(2011, 11, 4), 17.06], [Date.UTC(2012, 0, 8), 16.97], [Date.UTC(2012, 1, 5), 16.52], [Date.UTC(2012, 2, 11), 17.09], [Date.UTC(2012, 3, 8), 17.55], [Date.UTC(2012, 4, 9), 17.35], [Date.UTC(2012, 5, 10), 17.72], [Date.UTC(2012, 6, 4), 18.33], [Date.UTC(2012, 7, 10), 18.94], [Date.UTC(2012, 8, 2), 19.30], [Date.UTC(2012, 9, 5), 19.82], [Date.UTC(2012, 10, 4), 19.22], [Date.UTC(2012, 11, 2), 18.70], [Date.UTC(2013, 0, 5), 17.85], [Date.UTC(2013, 1, 8), 17.08], [Date.UTC(2013, 2, 11), 17.14], [Date.UTC(2013, 3, 7), 17.86], [Date.UTC(2013, 4, 8), 18.73], [Date.UTC(2013, 5, 9), 17.81], [Date.UTC(2013, 6, 7), 17.63], [Date.UTC(2013, 6, 12), 17.63], [Date.UTC(2013, 7, 4), 15.97], [Date.UTC(2013, 8, 11), 16.98], [Date.UTC(2013, 9, 10), 17.25], [Date.UTC(2013, 10, 9), 18.16], [Date.UTC(2013, 11, 6), 17.89], [Date.UTC(2014, 0, 1), 17.94], [Date.UTC(2014, 1, 8), 18.33], [Date.UTC(2014, 2, 3), 17.53], [Date.UTC(2014, 3, 10), 17.63], [Date.UTC(2014, 4, 7), 16.93], [Date.UTC(2014, 5, 8), 16.19], [Date.UTC(2014, 6, 6), 17.14], [Date.UTC(2014, 7, 11), 16.40], [Date.UTC(2014, 8, 1), 16.72], [Date.UTC(2014, 9, 3), 17.66], [Date.UTC(2014, 10, 8), 17.47], [Date.UTC(2014, 11, 7), 17.59], [Date.UTC(2015, 0, 6), 16.70], [Date.UTC(2015, 1, 5), 16.49], [Date.UTC(2015, 2, 7), 16.64], [Date.UTC(2015, 3, 13), 15.75], [Date.UTC(2015, 4, 13), 16.85], [Date.UTC(2015, 5, 6), 16.79], [Date.UTC(2015, 6, 12), 16.15], [Date.UTC(2015, 7, 6), 14.73], [Date.UTC(2015, 8, 5), 15.62], [Date.UTC(2015, 9, 4), 16.19], [Date.UTC(2015, 10, 7), 17.15], [Date.UTC(2015, 11, 4), 16.46], [Date.UTC(2016, 0, 2), 16.04], [Date.UTC(2016, 1, 2), 15.59], [Date.UTC(2016, 2, 3), 14.60], [Date.UTC(2016, 3, 7), 13.91], [Date.UTC(2016, 4, 6), 13.22], [Date.UTC(2016, 5, 5), 12.38], [Date.UTC(2016, 6, 4), 12.24], [Date.UTC(2016, 7, 6), 11.30], [Date.UTC(2016, 8, 8), 10.95], [Date.UTC(2016, 9, 7), 9.84], [Date.UTC(2016, 10, 5), 9.20], [Date.UTC(2016, 11, 4), 8.73], [Date.UTC(2017, 0, 7), 9.35], [Date.UTC(2017, 1, 8), 8.44], [Date.UTC(2017, 2, 7), 7.74], [Date.UTC(2017, 3, 9), 6.97], [Date.UTC(2017, 4, 6), 7.00], [Date.UTC(2017, 5, 3), 6.85], [Date.UTC(2017, 6, 7), 7.32], [Date.UTC(2017, 7, 2), 6.48], [Date.UTC(2017, 8, 6), 7.38], [Date.UTC(2017, 9, 5), 8.37], [Date.UTC(2017, 10, 12), 9.29], [Date.UTC(2017, 11, 9), 10.16], [Date.UTC(2018, 0, 3), 11.04], [Date.UTC(2018, 1, 8), 11.86], [Date.UTC(2018, 2, 7), 12.76], [Date.UTC(2018, 3, 1), 13.59], [Date.UTC(2018, 4, 6), 14.00], [Date.UTC(2018, 5, 10), 14.94], [Date.UTC(2018, 6, 7), 14.66], [Date.UTC(2018, 7, 1), 14.97], [Date.UTC(2018, 8, 3), 15.45], [Date.UTC(2018, 9, 5), 15.38], [Date.UTC(2018, 10, 8), 14.40], [Date.UTC(2018, 11, 2), 14.28], [Date.UTC(2019, 0, 4), 13.34], [Date.UTC(2019, 1, 6), 12.42], [Date.UTC(2019, 2, 2), 13.31], [Date.UTC(2019, 3, 7), 14.08], [Date.UTC(2019, 4, 4), 14.24], [Date.UTC(2019, 5, 9), 13.30], [Date.UTC(2019, 6, 6), 14.21], [Date.UTC(2019, 7, 5), 15.15], [Date.UTC(2019, 8, 9), 15.21], [Date.UTC(2019, 9, 5), 16.18], [Date.UTC(2019, 10, 3), 16.04], [Date.UTC(2019, 11, 6), 16.09], [Date.UTC(2020, 0, 5), 15.77], [Date.UTC(2020, 1, 4), 16.77], [Date.UTC(2020, 2, 4), 16.33], [Date.UTC(2020, 3, 2), 16.72], [Date.UTC(2020, 4, 2), 17.07], [Date.UTC(2020, 5, 1), 17.19], [Date.UTC(2020, 6, 4), 16.45], [Date.UTC(2020, 7, 2), 16.98], [Date.UTC(2020, 8, 6), 15.95], [Date.UTC(2020, 9, 4), 16.95], [Date.UTC(2020, 10, 3), 16.21], [Date.UTC(2020, 11, 3), 16.48], [Date.UTC(2021, 0, 2), 17.38], [Date.UTC(2021, 1, 6), 16.34], [Date.UTC(2021, 2, 4), 15.33], [Date.UTC(2021, 3, 4), 14.32], [Date.UTC(2021, 4, 2), 13.38], [Date.UTC(2021, 5, 5), 12.54], [Date.UTC(2021, 6, 4), 11.63], [Date.UTC(2021, 7, 3), 12.57], [Date.UTC(2021, 8, 11), 11.83], [Date.UTC(2021, 9, 6), 11.16], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 11.80]]}, {name : 'Java',data : [[Date.UTC(2001, 5, 30), 26.49], [Date.UTC(2001, 6, 30), 25.03], [Date.UTC(2001, 7, 30), 24.66], [Date.UTC(2001, 8, 28), 24.82], [Date.UTC(2001, 9, 26), 25.68], [Date.UTC(2001, 10, 28), 24.37], [Date.UTC(2001, 11, 31), 24.20], [Date.UTC(2002, 0, 30), 24.06], [Date.UTC(2002, 1, 27), 24.01], [Date.UTC(2002, 2, 29), 24.41], [Date.UTC(2002, 3, 29), 25.05], [Date.UTC(2002, 4, 29), 25.19], [Date.UTC(2002, 5, 29), 24.20], [Date.UTC(2002, 6, 31), 24.53], [Date.UTC(2002, 7, 29), 22.89], [Date.UTC(2002, 8, 29), 24.48], [Date.UTC(2002, 9, 30), 24.20], [Date.UTC(2002, 10, 29), 24.12], [Date.UTC(2002, 11, 31), 24.23], [Date.UTC(2003, 0, 31), 24.79], [Date.UTC(2003, 1, 28), 24.78], [Date.UTC(2003, 2, 31), 24.60], [Date.UTC(2003, 3, 30), 24.66], [Date.UTC(2003, 4, 30), 23.11], [Date.UTC(2003, 5, 30), 22.34], [Date.UTC(2003, 6, 31), 23.21], [Date.UTC(2003, 7, 31), 22.24], [Date.UTC(2003, 8, 30), 21.90], [Date.UTC(2003, 9, 31), 23.08], [Date.UTC(2003, 10, 30), 25.01], [Date.UTC(2003, 11, 31), 23.57], [Date.UTC(2004, 0, 31), 22.56], [Date.UTC(2004, 1, 29), 23.17], [Date.UTC(2004, 2, 31), 24.24], [Date.UTC(2004, 3, 30), 18.69], [Date.UTC(2004, 4, 30), 17.54], [Date.UTC(2004, 5, 30), 17.05], [Date.UTC(2004, 6, 31), 17.00], [Date.UTC(2004, 7, 30), 15.90], [Date.UTC(2004, 8, 30), 17.05], [Date.UTC(2004, 9, 31), 14.80], [Date.UTC(2004, 10, 30), 16.33], [Date.UTC(2004, 11, 31), 17.48], [Date.UTC(2005, 0, 31), 18.34], [Date.UTC(2005, 1, 28), 18.87], [Date.UTC(2005, 2, 31), 16.98], [Date.UTC(2005, 3, 30), 17.40], [Date.UTC(2005, 4, 31), 18.57], [Date.UTC(2005, 5, 30), 19.66], [Date.UTC(2005, 6, 31), 21.21], [Date.UTC(2005, 7, 31), 22.44], [Date.UTC(2005, 8, 30), 21.87], [Date.UTC(2005, 11, 3), 22.13], [Date.UTC(2006, 0, 4), 22.25], [Date.UTC(2006, 1, 2), 22.43], [Date.UTC(2006, 2, 1), 21.89], [Date.UTC(2006, 3, 2), 21.28], [Date.UTC(2006, 4, 1), 21.32], [Date.UTC(2006, 5, 1), 21.13], [Date.UTC(2006, 6, 2), 21.85], [Date.UTC(2006, 7, 2), 22.38], [Date.UTC(2006, 8, 2), 21.53], [Date.UTC(2006, 9, 1), 21.17], [Date.UTC(2006, 10, 2), 20.40], [Date.UTC(2006, 11, 1), 19.91], [Date.UTC(2007, 0, 2), 19.16], [Date.UTC(2007, 1, 3), 18.98], [Date.UTC(2007, 2, 3), 18.04], [Date.UTC(2007, 3, 1), 18.36], [Date.UTC(2007, 4, 5), 19.14], [Date.UTC(2007, 5, 2), 20.03], [Date.UTC(2007, 6, 2), 21.01], [Date.UTC(2007, 7, 5), 21.77], [Date.UTC(2007, 8, 2), 21.70], [Date.UTC(2007, 9, 4), 21.62], [Date.UTC(2007, 10, 4), 20.54], [Date.UTC(2007, 11, 3), 20.05], [Date.UTC(2008, 0, 3), 20.85], [Date.UTC(2008, 1, 7), 21.48], [Date.UTC(2008, 5, 1), 20.89], [Date.UTC(2008, 6, 2), 21.34], [Date.UTC(2008, 7, 3), 21.57], [Date.UTC(2008, 8, 3), 20.71], [Date.UTC(2008, 9, 6), 20.95], [Date.UTC(2008, 10, 2), 20.30], [Date.UTC(2008, 11, 3), 17.92], [Date.UTC(2009, 0, 2), 19.02], [Date.UTC(2009, 1, 1), 19.40], [Date.UTC(2009, 2, 5), 19.80], [Date.UTC(2009, 3, 7), 19.34], [Date.UTC(2009, 4, 1), 19.54], [Date.UTC(2009, 5, 4), 20.15], [Date.UTC(2009, 6, 2), 20.45], [Date.UTC(2009, 7, 1), 19.53], [Date.UTC(2009, 8, 5), 19.38], [Date.UTC(2009, 9, 2), 18.65], [Date.UTC(2009, 10, 2), 18.37], [Date.UTC(2009, 11, 2), 17.06], [Date.UTC(2010, 0, 5), 17.48], [Date.UTC(2010, 1, 7), 17.35], [Date.UTC(2010, 2, 7), 17.51], [Date.UTC(2010, 3, 5), 18.05], [Date.UTC(2010, 4, 15), 17.96], [Date.UTC(2010, 6, 6), 18.67], [Date.UTC(2010, 6, 30), 17.99], [Date.UTC(2010, 8, 11), 17.92], [Date.UTC(2010, 9, 2), 18.17], [Date.UTC(2010, 10, 3), 18.51], [Date.UTC(2010, 11, 7), 18.00], [Date.UTC(2011, 0, 2), 17.77], [Date.UTC(2011, 1, 8), 18.48], [Date.UTC(2011, 2, 8), 19.71], [Date.UTC(2011, 3, 3), 19.04], [Date.UTC(2011, 4, 2), 18.16], [Date.UTC(2011, 5, 5), 18.58], [Date.UTC(2011, 5, 27), 18.58], [Date.UTC(2011, 6, 8), 19.25], [Date.UTC(2011, 7, 3), 19.41], [Date.UTC(2011, 8, 10), 18.76], [Date.UTC(2011, 9, 9), 17.91], [Date.UTC(2011, 10, 7), 17.87], [Date.UTC(2011, 11, 4), 17.56], [Date.UTC(2012, 0, 8), 17.47], [Date.UTC(2012, 1, 5), 17.05], [Date.UTC(2012, 2, 11), 17.11], [Date.UTC(2012, 3, 8), 17.03], [Date.UTC(2012, 4, 9), 16.60], [Date.UTC(2012, 5, 10), 16.26], [Date.UTC(2012, 6, 4), 16.09], [Date.UTC(2012, 7, 10), 16.35], [Date.UTC(2012, 8, 2), 16.27], [Date.UTC(2012, 9, 5), 17.19], [Date.UTC(2012, 10, 4), 17.46], [Date.UTC(2012, 11, 2), 17.57], [Date.UTC(2013, 0, 5), 17.42], [Date.UTC(2013, 1, 8), 18.39], [Date.UTC(2013, 2, 11), 18.16], [Date.UTC(2013, 3, 7), 17.68], [Date.UTC(2013, 4, 8), 16.91], [Date.UTC(2013, 5, 9), 16.66], [Date.UTC(2013, 6, 7), 15.91], [Date.UTC(2013, 6, 12), 15.91], [Date.UTC(2013, 7, 4), 15.98], [Date.UTC(2013, 8, 11), 16.15], [Date.UTC(2013, 9, 10), 16.11], [Date.UTC(2013, 10, 9), 16.52], [Date.UTC(2013, 11, 6), 17.31], [Date.UTC(2014, 0, 1), 16.52], [Date.UTC(2014, 1, 8), 17.32], [Date.UTC(2014, 2, 3), 16.41], [Date.UTC(2014, 3, 10), 17.35], [Date.UTC(2014, 4, 7), 16.91], [Date.UTC(2014, 5, 8), 16.11], [Date.UTC(2014, 6, 6), 15.69], [Date.UTC(2014, 7, 11), 14.98], [Date.UTC(2014, 8, 1), 14.14], [Date.UTC(2014, 9, 3), 13.51], [Date.UTC(2014, 10, 8), 14.39], [Date.UTC(2014, 11, 7), 14.96], [Date.UTC(2015, 0, 6), 15.53], [Date.UTC(2015, 1, 5), 15.34], [Date.UTC(2015, 2, 7), 15.58], [Date.UTC(2015, 3, 13), 16.04], [Date.UTC(2015, 4, 13), 16.87], [Date.UTC(2015, 5, 6), 17.82], [Date.UTC(2015, 6, 12), 17.73], [Date.UTC(2015, 7, 6), 19.27], [Date.UTC(2015, 8, 5), 19.56], [Date.UTC(2015, 9, 4), 19.54], [Date.UTC(2015, 10, 7), 20.40], [Date.UTC(2015, 11, 4), 20.97], [Date.UTC(2016, 0, 2), 21.47], [Date.UTC(2016, 1, 2), 21.14], [Date.UTC(2016, 2, 3), 20.53], [Date.UTC(2016, 3, 7), 20.85], [Date.UTC(2016, 4, 6), 20.96], [Date.UTC(2016, 5, 5), 20.79], [Date.UTC(2016, 6, 4), 19.80], [Date.UTC(2016, 7, 6), 19.01], [Date.UTC(2016, 8, 8), 18.24], [Date.UTC(2016, 9, 7), 18.80], [Date.UTC(2016, 10, 5), 18.75], [Date.UTC(2016, 11, 4), 17.86], [Date.UTC(2017, 0, 7), 17.28], [Date.UTC(2017, 1, 8), 16.68], [Date.UTC(2017, 2, 7), 16.38], [Date.UTC(2017, 3, 9), 15.57], [Date.UTC(2017, 4, 6), 14.64], [Date.UTC(2017, 5, 3), 14.49], [Date.UTC(2017, 6, 7), 13.77], [Date.UTC(2017, 7, 2), 12.96], [Date.UTC(2017, 8, 6), 12.69], [Date.UTC(2017, 9, 5), 12.43], [Date.UTC(2017, 10, 12), 13.23], [Date.UTC(2017, 11, 9), 13.27], [Date.UTC(2018, 0, 3), 14.22], [Date.UTC(2018, 1, 8), 14.99], [Date.UTC(2018, 2, 7), 14.94], [Date.UTC(2018, 3, 1), 15.78], [Date.UTC(2018, 4, 6), 16.38], [Date.UTC(2018, 5, 10), 15.37], [Date.UTC(2018, 6, 7), 16.14], [Date.UTC(2018, 7, 1), 16.88], [Date.UTC(2018, 8, 3), 17.44], [Date.UTC(2018, 9, 5), 17.80], [Date.UTC(2018, 10, 8), 16.75], [Date.UTC(2018, 11, 2), 15.93], [Date.UTC(2019, 0, 4), 16.90], [Date.UTC(2019, 1, 6), 15.88], [Date.UTC(2019, 2, 2), 14.88], [Date.UTC(2019, 3, 7), 15.04], [Date.UTC(2019, 4, 4), 16.00], [Date.UTC(2019, 5, 9), 15.00], [Date.UTC(2019, 6, 6), 15.06], [Date.UTC(2019, 7, 5), 16.03], [Date.UTC(2019, 8, 9), 16.66], [Date.UTC(2019, 9, 5), 16.88], [Date.UTC(2019, 10, 3), 16.25], [Date.UTC(2019, 11, 6), 17.25], [Date.UTC(2020, 0, 5), 16.90], [Date.UTC(2020, 1, 4), 17.36], [Date.UTC(2020, 2, 4), 17.78], [Date.UTC(2020, 3, 2), 16.73], [Date.UTC(2020, 4, 2), 16.28], [Date.UTC(2020, 5, 1), 16.10], [Date.UTC(2020, 6, 4), 15.10], [Date.UTC(2020, 7, 2), 14.43], [Date.UTC(2020, 8, 6), 13.48], [Date.UTC(2020, 9, 4), 12.56], [Date.UTC(2020, 10, 3), 11.68], [Date.UTC(2020, 11, 3), 12.53], [Date.UTC(2021, 0, 2), 11.96], [Date.UTC(2021, 1, 6), 11.29], [Date.UTC(2021, 2, 4), 10.45], [Date.UTC(2021, 3, 4), 11.23], [Date.UTC(2021, 4, 2), 11.74], [Date.UTC(2021, 5, 5), 11.54], [Date.UTC(2021, 6, 4), 11.20], [Date.UTC(2021, 7, 3), 10.43], [Date.UTC(2021, 8, 11), 11.12], [Date.UTC(2021, 9, 6), 10.46], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 10.12]]}, {name : 'C++',data : [[Date.UTC(2001, 5, 30), 14.20], [Date.UTC(2001, 6, 30), 16.11], [Date.UTC(2001, 7, 30), 16.12], [Date.UTC(2001, 8, 28), 15.85], [Date.UTC(2001, 9, 26), 16.10], [Date.UTC(2001, 10, 28), 15.67], [Date.UTC(2001, 11, 31), 14.96], [Date.UTC(2002, 0, 30), 15.18], [Date.UTC(2002, 1, 27), 15.54], [Date.UTC(2002, 2, 29), 15.91], [Date.UTC(2002, 3, 29), 15.37], [Date.UTC(2002, 4, 29), 14.86], [Date.UTC(2002, 5, 29), 14.18], [Date.UTC(2002, 6, 31), 14.94], [Date.UTC(2002, 7, 29), 14.77], [Date.UTC(2002, 8, 29), 15.90], [Date.UTC(2002, 9, 30), 15.03], [Date.UTC(2002, 10, 29), 13.64], [Date.UTC(2002, 11, 31), 13.19], [Date.UTC(2003, 0, 31), 14.63], [Date.UTC(2003, 1, 28), 15.53], [Date.UTC(2003, 2, 31), 14.57], [Date.UTC(2003, 3, 30), 15.80], [Date.UTC(2003, 4, 30), 15.58], [Date.UTC(2003, 5, 30), 16.72], [Date.UTC(2003, 6, 31), 16.58], [Date.UTC(2003, 7, 31), 17.53], [Date.UTC(2003, 8, 30), 16.17], [Date.UTC(2003, 9, 31), 16.31], [Date.UTC(2003, 10, 30), 17.42], [Date.UTC(2003, 11, 31), 16.08], [Date.UTC(2004, 0, 31), 15.71], [Date.UTC(2004, 1, 29), 14.50], [Date.UTC(2004, 2, 31), 15.99], [Date.UTC(2004, 3, 30), 12.27], [Date.UTC(2004, 4, 30), 12.55], [Date.UTC(2004, 5, 30), 13.44], [Date.UTC(2004, 6, 31), 15.31], [Date.UTC(2004, 7, 30), 14.92], [Date.UTC(2004, 8, 30), 15.02], [Date.UTC(2004, 9, 31), 13.86], [Date.UTC(2004, 10, 30), 11.91], [Date.UTC(2004, 11, 31), 11.93], [Date.UTC(2005, 0, 31), 11.34], [Date.UTC(2005, 1, 28), 11.63], [Date.UTC(2005, 2, 31), 10.19], [Date.UTC(2005, 3, 30), 9.90], [Date.UTC(2005, 4, 31), 9.72], [Date.UTC(2005, 5, 30), 11.06], [Date.UTC(2005, 6, 31), 10.51], [Date.UTC(2005, 7, 31), 11.17], [Date.UTC(2005, 8, 30), 11.82], [Date.UTC(2005, 11, 3), 11.03], [Date.UTC(2006, 0, 4), 11.46], [Date.UTC(2006, 1, 2), 11.30], [Date.UTC(2006, 2, 1), 11.16], [Date.UTC(2006, 3, 2), 10.90], [Date.UTC(2006, 4, 1), 10.94], [Date.UTC(2006, 5, 1), 10.67], [Date.UTC(2006, 6, 2), 9.78], [Date.UTC(2006, 7, 2), 10.25], [Date.UTC(2006, 8, 2), 10.75], [Date.UTC(2006, 9, 1), 11.06], [Date.UTC(2006, 10, 2), 11.05], [Date.UTC(2006, 11, 1), 10.41], [Date.UTC(2007, 0, 2), 10.42], [Date.UTC(2007, 1, 3), 10.77], [Date.UTC(2007, 2, 3), 11.11], [Date.UTC(2007, 3, 1), 10.72], [Date.UTC(2007, 4, 5), 10.11], [Date.UTC(2007, 5, 2), 11.12], [Date.UTC(2007, 6, 2), 10.50], [Date.UTC(2007, 7, 5), 10.11], [Date.UTC(2007, 8, 2), 9.94], [Date.UTC(2007, 9, 4), 9.58], [Date.UTC(2007, 10, 4), 8.75], [Date.UTC(2007, 11, 3), 7.87], [Date.UTC(2008, 0, 3), 8.73], [Date.UTC(2008, 1, 7), 9.27], [Date.UTC(2008, 5, 1), 10.81], [Date.UTC(2008, 6, 2), 10.69], [Date.UTC(2008, 7, 3), 10.06], [Date.UTC(2008, 8, 3), 10.72], [Date.UTC(2008, 9, 6), 10.95], [Date.UTC(2008, 10, 2), 10.36], [Date.UTC(2008, 11, 3), 10.10], [Date.UTC(2009, 0, 2), 10.12], [Date.UTC(2009, 1, 1), 9.63], [Date.UTC(2009, 2, 5), 10.36], [Date.UTC(2009, 3, 7), 10.74], [Date.UTC(2009, 4, 1), 11.07], [Date.UTC(2009, 5, 4), 10.59], [Date.UTC(2009, 6, 2), 10.42], [Date.UTC(2009, 7, 1), 10.50], [Date.UTC(2009, 8, 5), 9.99], [Date.UTC(2009, 9, 2), 9.88], [Date.UTC(2009, 10, 2), 10.00], [Date.UTC(2009, 11, 2), 9.18], [Date.UTC(2010, 0, 5), 9.71], [Date.UTC(2010, 1, 7), 9.45], [Date.UTC(2010, 2, 7), 9.61], [Date.UTC(2010, 3, 5), 9.71], [Date.UTC(2010, 4, 15), 10.38], [Date.UTC(2010, 6, 6), 10.47], [Date.UTC(2010, 6, 30), 9.66], [Date.UTC(2010, 8, 11), 9.81], [Date.UTC(2010, 9, 2), 9.80], [Date.UTC(2010, 10, 3), 9.50], [Date.UTC(2010, 11, 7), 9.01], [Date.UTC(2011, 0, 2), 8.78], [Date.UTC(2011, 1, 8), 8.19], [Date.UTC(2011, 2, 8), 8.75], [Date.UTC(2011, 3, 3), 9.23], [Date.UTC(2011, 4, 2), 9.15], [Date.UTC(2011, 5, 5), 9.83], [Date.UTC(2011, 5, 27), 9.83], [Date.UTC(2011, 6, 8), 9.02], [Date.UTC(2011, 7, 3), 8.43], [Date.UTC(2011, 8, 10), 8.85], [Date.UTC(2011, 9, 9), 9.07], [Date.UTC(2011, 10, 7), 8.08], [Date.UTC(2011, 11, 4), 8.25], [Date.UTC(2012, 0, 8), 8.05], [Date.UTC(2012, 1, 5), 7.85], [Date.UTC(2012, 2, 11), 8.05], [Date.UTC(2012, 3, 8), 8.90], [Date.UTC(2012, 4, 9), 9.82], [Date.UTC(2012, 5, 10), 9.36], [Date.UTC(2012, 6, 4), 9.12], [Date.UTC(2012, 7, 10), 9.33], [Date.UTC(2012, 8, 2), 9.15], [Date.UTC(2012, 9, 5), 9.26], [Date.UTC(2012, 10, 4), 9.70], [Date.UTC(2012, 11, 2), 9.20], [Date.UTC(2013, 0, 5), 9.14], [Date.UTC(2013, 1, 8), 8.76], [Date.UTC(2013, 2, 11), 9.11], [Date.UTC(2013, 3, 7), 9.71], [Date.UTC(2013, 4, 8), 9.20], [Date.UTC(2013, 5, 9), 8.82], [Date.UTC(2013, 6, 7), 8.75], [Date.UTC(2013, 6, 12), 8.75], [Date.UTC(2013, 7, 4), 9.37], [Date.UTC(2013, 8, 11), 8.66], [Date.UTC(2013, 9, 10), 8.66], [Date.UTC(2013, 10, 9), 8.37], [Date.UTC(2013, 11, 6), 8.27], [Date.UTC(2014, 0, 1), 7.56], [Date.UTC(2014, 1, 8), 6.89], [Date.UTC(2014, 2, 3), 6.31], [Date.UTC(2014, 3, 10), 6.14], [Date.UTC(2014, 4, 7), 5.99], [Date.UTC(2014, 5, 8), 6.43], [Date.UTC(2014, 6, 6), 5.52], [Date.UTC(2014, 7, 11), 4.70], [Date.UTC(2014, 8, 1), 4.67], [Date.UTC(2014, 9, 3), 4.87], [Date.UTC(2014, 10, 8), 6.10], [Date.UTC(2014, 11, 7), 6.10], [Date.UTC(2015, 0, 6), 6.70], [Date.UTC(2015, 1, 5), 6.61], [Date.UTC(2015, 2, 7), 6.64], [Date.UTC(2015, 3, 13), 6.96], [Date.UTC(2015, 4, 13), 7.87], [Date.UTC(2015, 5, 6), 7.76], [Date.UTC(2015, 6, 12), 8.64], [Date.UTC(2015, 7, 6), 7.74], [Date.UTC(2015, 8, 5), 6.78], [Date.UTC(2015, 9, 4), 5.75], [Date.UTC(2015, 10, 7), 6.20], [Date.UTC(2015, 11, 4), 5.94], [Date.UTC(2016, 0, 2), 6.91], [Date.UTC(2016, 1, 2), 6.91], [Date.UTC(2016, 2, 3), 6.72], [Date.UTC(2016, 3, 7), 5.92], [Date.UTC(2016, 4, 6), 6.70], [Date.UTC(2016, 5, 5), 6.20], [Date.UTC(2016, 6, 4), 6.31], [Date.UTC(2016, 7, 6), 5.80], [Date.UTC(2016, 8, 8), 6.66], [Date.UTC(2016, 9, 7), 5.80], [Date.UTC(2016, 10, 5), 5.41], [Date.UTC(2016, 11, 4), 5.34], [Date.UTC(2017, 0, 7), 6.30], [Date.UTC(2017, 1, 8), 5.43], [Date.UTC(2017, 2, 7), 5.18], [Date.UTC(2017, 3, 9), 4.55], [Date.UTC(2017, 4, 6), 4.75], [Date.UTC(2017, 5, 3), 5.72], [Date.UTC(2017, 6, 7), 5.58], [Date.UTC(2017, 7, 2), 5.55], [Date.UTC(2017, 8, 6), 5.56], [Date.UTC(2017, 9, 5), 5.01], [Date.UTC(2017, 10, 12), 5.34], [Date.UTC(2017, 11, 9), 4.72], [Date.UTC(2018, 0, 3), 5.60], [Date.UTC(2018, 1, 8), 5.73], [Date.UTC(2018, 2, 7), 6.45], [Date.UTC(2018, 3, 1), 7.22], [Date.UTC(2018, 4, 6), 7.67], [Date.UTC(2018, 5, 10), 8.34], [Date.UTC(2018, 6, 7), 7.62], [Date.UTC(2018, 7, 1), 7.47], [Date.UTC(2018, 8, 3), 7.39], [Date.UTC(2018, 9, 5), 7.59], [Date.UTC(2018, 10, 8), 8.28], [Date.UTC(2018, 11, 2), 7.56], [Date.UTC(2019, 0, 4), 8.16], [Date.UTC(2019, 1, 6), 7.44], [Date.UTC(2019, 2, 2), 8.13], [Date.UTC(2019, 3, 7), 8.84], [Date.UTC(2019, 4, 4), 8.10], [Date.UTC(2019, 5, 9), 7.38], [Date.UTC(2019, 6, 6), 6.70], [Date.UTC(2019, 7, 5), 6.06], [Date.UTC(2019, 8, 9), 5.64], [Date.UTC(2019, 9, 5), 6.23], [Date.UTC(2019, 10, 3), 5.60], [Date.UTC(2019, 11, 6), 6.20], [Date.UTC(2020, 0, 5), 5.57], [Date.UTC(2020, 1, 4), 6.16], [Date.UTC(2020, 2, 4), 6.79], [Date.UTC(2020, 3, 2), 6.78], [Date.UTC(2020, 4, 2), 6.13], [Date.UTC(2020, 5, 1), 5.95], [Date.UTC(2020, 6, 4), 6.21], [Date.UTC(2020, 7, 2), 6.84], [Date.UTC(2020, 8, 6), 7.11], [Date.UTC(2020, 9, 4), 6.94], [Date.UTC(2020, 10, 3), 7.60], [Date.UTC(2020, 11, 3), 6.91], [Date.UTC(2021, 0, 2), 7.56], [Date.UTC(2021, 1, 6), 6.88], [Date.UTC(2021, 2, 4), 6.52], [Date.UTC(2021, 3, 4), 7.14], [Date.UTC(2021, 4, 2), 7.81], [Date.UTC(2021, 5, 5), 7.36], [Date.UTC(2021, 6, 4), 8.02], [Date.UTC(2021, 7, 3), 7.36], [Date.UTC(2021, 8, 11), 7.13], [Date.UTC(2021, 9, 6), 7.50], [Date.UTC(2021, 10, 6), 8.28], [Date.UTC(2021, 11, 5), 7.73]]}, {name : 'C#',data : [[Date.UTC(2001, 5, 30), 0.38], [Date.UTC(2001, 6, 30), 0.43], [Date.UTC(2001, 7, 30), 0.38], [Date.UTC(2001, 8, 28), 0.39], [Date.UTC(2001, 9, 26), 0.42], [Date.UTC(2001, 10, 28), 0.76], [Date.UTC(2001, 11, 31), 0.59], [Date.UTC(2002, 0, 30), 0.62], [Date.UTC(2002, 1, 27), 0.74], [Date.UTC(2002, 2, 29), 0.74], [Date.UTC(2002, 3, 29), 1.18], [Date.UTC(2002, 4, 29), 1.16], [Date.UTC(2002, 5, 29), 1.46], [Date.UTC(2002, 6, 31), 1.36], [Date.UTC(2002, 7, 29), 1.46], [Date.UTC(2002, 8, 29), 1.65], [Date.UTC(2002, 9, 30), 1.78], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.45], [Date.UTC(2003, 0, 31), 1.99], [Date.UTC(2003, 1, 28), 1.98], [Date.UTC(2003, 2, 31), 2.38], [Date.UTC(2003, 3, 30), 1.88], [Date.UTC(2003, 4, 30), 1.94], [Date.UTC(2003, 5, 30), 1.78], [Date.UTC(2003, 6, 31), 2.00], [Date.UTC(2003, 7, 31), 2.06], [Date.UTC(2003, 8, 30), 1.94], [Date.UTC(2003, 9, 31), 1.90], [Date.UTC(2003, 10, 30), 1.71], [Date.UTC(2003, 11, 31), 1.80], [Date.UTC(2004, 0, 31), 2.18], [Date.UTC(2004, 1, 29), 2.24], [Date.UTC(2004, 2, 31), 2.14], [Date.UTC(2004, 3, 30), 1.88], [Date.UTC(2004, 4, 30), 1.65], [Date.UTC(2004, 5, 30), 1.67], [Date.UTC(2004, 6, 31), 1.63], [Date.UTC(2004, 7, 30), 1.63], [Date.UTC(2004, 8, 30), 1.64], [Date.UTC(2004, 9, 31), 1.50], [Date.UTC(2004, 10, 30), 1.95], [Date.UTC(2004, 11, 31), 2.20], [Date.UTC(2005, 0, 31), 2.36], [Date.UTC(2005, 1, 28), 2.53], [Date.UTC(2005, 2, 31), 2.82], [Date.UTC(2005, 3, 30), 2.77], [Date.UTC(2005, 4, 31), 2.78], [Date.UTC(2005, 5, 30), 3.14], [Date.UTC(2005, 6, 31), 3.48], [Date.UTC(2005, 7, 31), 3.29], [Date.UTC(2005, 8, 30), 3.46], [Date.UTC(2005, 11, 3), 3.31], [Date.UTC(2006, 0, 4), 3.55], [Date.UTC(2006, 1, 2), 3.97], [Date.UTC(2006, 2, 1), 3.15], [Date.UTC(2006, 3, 2), 3.95], [Date.UTC(2006, 4, 1), 3.27], [Date.UTC(2006, 5, 1), 3.24], [Date.UTC(2006, 6, 2), 3.40], [Date.UTC(2006, 7, 2), 2.68], [Date.UTC(2006, 8, 2), 2.99], [Date.UTC(2006, 9, 1), 3.06], [Date.UTC(2006, 10, 2), 3.02], [Date.UTC(2006, 11, 1), 3.17], [Date.UTC(2007, 0, 2), 3.52], [Date.UTC(2007, 1, 3), 3.19], [Date.UTC(2007, 2, 3), 3.37], [Date.UTC(2007, 3, 1), 3.55], [Date.UTC(2007, 4, 5), 3.66], [Date.UTC(2007, 5, 2), 3.48], [Date.UTC(2007, 6, 2), 3.71], [Date.UTC(2007, 7, 5), 3.99], [Date.UTC(2007, 8, 2), 3.58], [Date.UTC(2007, 9, 4), 3.74], [Date.UTC(2007, 10, 4), 3.92], [Date.UTC(2007, 11, 3), 3.99], [Date.UTC(2008, 0, 3), 4.86], [Date.UTC(2008, 1, 7), 4.51], [Date.UTC(2008, 5, 1), 4.06], [Date.UTC(2008, 6, 2), 4.00], [Date.UTC(2008, 7, 3), 3.70], [Date.UTC(2008, 8, 3), 4.33], [Date.UTC(2008, 9, 6), 3.77], [Date.UTC(2008, 10, 2), 4.03], [Date.UTC(2008, 11, 3), 4.58], [Date.UTC(2009, 0, 2), 5.61], [Date.UTC(2009, 1, 1), 5.06], [Date.UTC(2009, 2, 5), 4.32], [Date.UTC(2009, 3, 7), 4.06], [Date.UTC(2009, 4, 1), 4.27], [Date.UTC(2009, 5, 4), 4.54], [Date.UTC(2009, 6, 2), 4.54], [Date.UTC(2009, 7, 1), 4.44], [Date.UTC(2009, 8, 5), 4.19], [Date.UTC(2009, 9, 2), 4.42], [Date.UTC(2009, 10, 2), 5.35], [Date.UTC(2009, 11, 2), 6.26], [Date.UTC(2010, 0, 5), 5.77], [Date.UTC(2010, 1, 7), 5.01], [Date.UTC(2010, 2, 7), 4.26], [Date.UTC(2010, 3, 5), 4.43], [Date.UTC(2010, 4, 15), 4.78], [Date.UTC(2010, 6, 6), 5.73], [Date.UTC(2010, 6, 30), 4.99], [Date.UTC(2010, 8, 11), 5.02], [Date.UTC(2010, 9, 2), 4.96], [Date.UTC(2010, 10, 3), 5.71], [Date.UTC(2010, 11, 7), 6.69], [Date.UTC(2011, 0, 2), 6.23], [Date.UTC(2011, 1, 8), 6.81], [Date.UTC(2011, 2, 8), 7.21], [Date.UTC(2011, 3, 3), 7.19], [Date.UTC(2011, 4, 2), 7.54], [Date.UTC(2011, 5, 5), 6.84], [Date.UTC(2011, 5, 27), 6.84], [Date.UTC(2011, 6, 8), 6.22], [Date.UTC(2011, 7, 3), 6.04], [Date.UTC(2011, 8, 10), 6.82], [Date.UTC(2011, 9, 9), 6.72], [Date.UTC(2011, 10, 7), 7.32], [Date.UTC(2011, 11, 4), 8.21], [Date.UTC(2012, 0, 8), 8.76], [Date.UTC(2012, 1, 5), 8.65], [Date.UTC(2012, 2, 11), 8.24], [Date.UTC(2012, 3, 8), 7.35], [Date.UTC(2012, 4, 9), 6.82], [Date.UTC(2012, 5, 10), 7.03], [Date.UTC(2012, 6, 4), 6.67], [Date.UTC(2012, 7, 10), 6.59], [Date.UTC(2012, 8, 2), 6.60], [Date.UTC(2012, 9, 5), 6.53], [Date.UTC(2012, 10, 4), 5.59], [Date.UTC(2012, 11, 2), 5.55], [Date.UTC(2013, 0, 5), 6.20], [Date.UTC(2013, 1, 8), 6.68], [Date.UTC(2013, 2, 11), 6.60], [Date.UTC(2013, 3, 7), 6.15], [Date.UTC(2013, 4, 8), 6.12], [Date.UTC(2013, 5, 9), 5.78], [Date.UTC(2013, 6, 7), 6.21], [Date.UTC(2013, 6, 12), 6.21], [Date.UTC(2013, 7, 4), 6.12], [Date.UTC(2013, 8, 11), 5.56], [Date.UTC(2013, 9, 10), 5.72], [Date.UTC(2013, 10, 9), 6.02], [Date.UTC(2013, 11, 6), 5.62], [Date.UTC(2014, 0, 1), 5.85], [Date.UTC(2014, 1, 8), 6.45], [Date.UTC(2014, 2, 3), 5.57], [Date.UTC(2014, 3, 10), 4.82], [Date.UTC(2014, 4, 7), 3.75], [Date.UTC(2014, 5, 8), 3.94], [Date.UTC(2014, 6, 6), 4.05], [Date.UTC(2014, 7, 11), 3.41], [Date.UTC(2014, 8, 1), 4.35], [Date.UTC(2014, 9, 3), 4.75], [Date.UTC(2014, 10, 8), 4.98], [Date.UTC(2014, 11, 7), 4.33], [Date.UTC(2015, 0, 6), 5.05], [Date.UTC(2015, 1, 5), 5.74], [Date.UTC(2015, 2, 7), 4.92], [Date.UTC(2015, 3, 13), 4.95], [Date.UTC(2015, 4, 13), 5.26], [Date.UTC(2015, 5, 6), 5.06], [Date.UTC(2015, 6, 12), 5.65], [Date.UTC(2015, 7, 6), 4.84], [Date.UTC(2015, 8, 5), 4.91], [Date.UTC(2015, 9, 4), 4.82], [Date.UTC(2015, 10, 7), 4.32], [Date.UTC(2015, 11, 4), 4.11], [Date.UTC(2016, 0, 2), 4.71], [Date.UTC(2016, 1, 2), 4.40], [Date.UTC(2016, 2, 3), 4.27], [Date.UTC(2016, 3, 7), 3.80], [Date.UTC(2016, 4, 6), 4.48], [Date.UTC(2016, 5, 5), 3.79], [Date.UTC(2016, 6, 4), 3.92], [Date.UTC(2016, 7, 6), 4.91], [Date.UTC(2016, 8, 8), 5.49], [Date.UTC(2016, 9, 7), 4.37], [Date.UTC(2016, 10, 5), 3.66], [Date.UTC(2016, 11, 4), 3.17], [Date.UTC(2017, 0, 7), 4.04], [Date.UTC(2017, 1, 8), 4.90], [Date.UTC(2017, 2, 7), 4.41], [Date.UTC(2017, 3, 9), 3.58], [Date.UTC(2017, 4, 6), 3.46], [Date.UTC(2017, 5, 3), 3.53], [Date.UTC(2017, 6, 7), 3.52], [Date.UTC(2017, 7, 2), 4.20], [Date.UTC(2017, 8, 6), 4.78], [Date.UTC(2017, 9, 5), 3.86], [Date.UTC(2017, 10, 12), 3.01], [Date.UTC(2017, 11, 9), 2.82], [Date.UTC(2018, 0, 3), 3.75], [Date.UTC(2018, 1, 8), 4.45], [Date.UTC(2018, 2, 7), 5.07], [Date.UTC(2018, 3, 1), 5.27], [Date.UTC(2018, 4, 6), 4.40], [Date.UTC(2018, 5, 10), 4.31], [Date.UTC(2018, 6, 7), 3.79], [Date.UTC(2018, 7, 1), 3.54], [Date.UTC(2018, 8, 3), 3.30], [Date.UTC(2018, 9, 5), 3.49], [Date.UTC(2018, 10, 8), 3.95], [Date.UTC(2018, 11, 2), 3.45], [Date.UTC(2019, 0, 4), 3.28], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 3.27], [Date.UTC(2019, 3, 7), 3.52], [Date.UTC(2019, 4, 4), 3.98], [Date.UTC(2019, 5, 9), 4.48], [Date.UTC(2019, 6, 6), 4.36], [Date.UTC(2019, 7, 5), 3.84], [Date.UTC(2019, 8, 9), 3.40], [Date.UTC(2019, 9, 5), 3.86], [Date.UTC(2019, 10, 3), 4.32], [Date.UTC(2019, 11, 6), 4.80], [Date.UTC(2020, 0, 5), 5.35], [Date.UTC(2020, 1, 4), 5.93], [Date.UTC(2020, 2, 4), 5.32], [Date.UTC(2020, 3, 2), 4.74], [Date.UTC(2020, 4, 2), 4.29], [Date.UTC(2020, 5, 1), 4.73], [Date.UTC(2020, 6, 4), 5.25], [Date.UTC(2020, 7, 2), 4.68], [Date.UTC(2020, 8, 6), 4.58], [Date.UTC(2020, 9, 4), 4.16], [Date.UTC(2020, 10, 3), 4.67], [Date.UTC(2020, 11, 3), 4.20], [Date.UTC(2021, 0, 2), 3.95], [Date.UTC(2021, 1, 6), 4.44], [Date.UTC(2021, 2, 4), 4.97], [Date.UTC(2021, 3, 4), 4.91], [Date.UTC(2021, 4, 2), 4.41], [Date.UTC(2021, 5, 5), 4.33], [Date.UTC(2021, 6, 4), 4.84], [Date.UTC(2021, 7, 3), 5.14], [Date.UTC(2021, 8, 11), 5.78], [Date.UTC(2021, 9, 6), 5.26], [Date.UTC(2021, 10, 6), 6.06], [Date.UTC(2021, 11, 5), 6.40]]}, {name : 'Visual Basic',data : [[Date.UTC(2010, 8, 11), 0.33], [Date.UTC(2010, 9, 2), 0.33], [Date.UTC(2010, 10, 3), 0.32], [Date.UTC(2010, 11, 7), 0.26], [Date.UTC(2011, 0, 2), 0.26], [Date.UTC(2011, 1, 8), 0.59], [Date.UTC(2011, 2, 8), 0.56], [Date.UTC(2011, 3, 3), 0.34], [Date.UTC(2011, 4, 2), 0.48], [Date.UTC(2011, 5, 5), 0.43], [Date.UTC(2011, 5, 27), 0.43], [Date.UTC(2011, 6, 8), 0.48], [Date.UTC(2011, 7, 3), 0.46], [Date.UTC(2011, 8, 10), 0.31], [Date.UTC(2011, 9, 9), 0.48], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.36], [Date.UTC(2012, 0, 8), 0.48], [Date.UTC(2012, 1, 5), 0.80], [Date.UTC(2012, 2, 11), 0.78], [Date.UTC(2012, 3, 8), 0.98], [Date.UTC(2012, 4, 9), 1.27], [Date.UTC(2012, 5, 10), 1.22], [Date.UTC(2012, 6, 4), 0.92], [Date.UTC(2012, 7, 10), 0.88], [Date.UTC(2012, 8, 2), 0.84], [Date.UTC(2012, 9, 5), 0.60], [Date.UTC(2012, 10, 4), 0.77], [Date.UTC(2012, 11, 2), 0.89], [Date.UTC(2013, 0, 5), 1.04], [Date.UTC(2013, 1, 8), 1.01], [Date.UTC(2013, 2, 11), 0.89], [Date.UTC(2013, 3, 7), 1.10], [Date.UTC(2013, 4, 8), 1.13], [Date.UTC(2013, 5, 9), 1.07], [Date.UTC(2013, 6, 7), 1.25], [Date.UTC(2013, 6, 12), 1.25], [Date.UTC(2013, 7, 4), 1.32], [Date.UTC(2013, 8, 11), 1.84], [Date.UTC(2013, 9, 10), 1.93], [Date.UTC(2013, 10, 9), 1.97], [Date.UTC(2013, 11, 6), 1.69], [Date.UTC(2014, 0, 1), 1.56], [Date.UTC(2014, 1, 8), 1.80], [Date.UTC(2014, 2, 3), 1.86], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.26], [Date.UTC(2014, 5, 8), 1.91], [Date.UTC(2014, 6, 6), 1.49], [Date.UTC(2014, 7, 11), 2.01], [Date.UTC(2014, 8, 1), 1.27], [Date.UTC(2014, 9, 3), 1.56], [Date.UTC(2014, 10, 8), 1.66], [Date.UTC(2014, 11, 7), 1.80], [Date.UTC(2015, 0, 6), 1.07], [Date.UTC(2015, 1, 5), 1.72], [Date.UTC(2015, 2, 7), 1.95], [Date.UTC(2015, 3, 13), 2.20], [Date.UTC(2015, 4, 13), 1.89], [Date.UTC(2015, 5, 6), 1.84], [Date.UTC(2015, 6, 12), 1.95], [Date.UTC(2015, 7, 6), 1.78], [Date.UTC(2015, 8, 5), 1.53], [Date.UTC(2015, 9, 4), 1.51], [Date.UTC(2015, 10, 7), 1.68], [Date.UTC(2015, 11, 4), 1.65], [Date.UTC(2016, 0, 2), 1.68], [Date.UTC(2016, 1, 2), 1.86], [Date.UTC(2016, 2, 3), 1.67], [Date.UTC(2016, 3, 7), 1.61], [Date.UTC(2016, 4, 6), 1.83], [Date.UTC(2016, 5, 5), 2.25], [Date.UTC(2016, 6, 4), 2.01], [Date.UTC(2016, 7, 6), 2.05], [Date.UTC(2016, 8, 8), 1.76], [Date.UTC(2016, 9, 7), 1.99], [Date.UTC(2016, 10, 5), 1.92], [Date.UTC(2016, 11, 4), 1.97], [Date.UTC(2017, 0, 7), 1.91], [Date.UTC(2017, 1, 8), 1.88], [Date.UTC(2017, 2, 7), 2.01], [Date.UTC(2017, 3, 9), 2.06], [Date.UTC(2017, 4, 6), 2.35], [Date.UTC(2017, 5, 3), 2.01], [Date.UTC(2017, 6, 7), 2.10], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.75], [Date.UTC(2017, 9, 5), 1.42], [Date.UTC(2017, 10, 12), 1.49], [Date.UTC(2017, 11, 9), 1.35], [Date.UTC(2018, 0, 3), 2.31], [Date.UTC(2018, 1, 8), 2.18], [Date.UTC(2018, 2, 7), 1.74], [Date.UTC(2018, 3, 1), 1.80], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.15], [Date.UTC(2018, 6, 7), 0.89], [Date.UTC(2018, 7, 1), 0.92], [Date.UTC(2018, 8, 3), 0.68], [Date.UTC(2018, 9, 5), 0.65], [Date.UTC(2018, 10, 8), 0.85], [Date.UTC(2018, 11, 2), 0.98], [Date.UTC(2019, 0, 4), 1.03], [Date.UTC(2019, 1, 6), 0.99], [Date.UTC(2019, 2, 2), 0.95], [Date.UTC(2019, 3, 7), 1.06], [Date.UTC(2019, 4, 4), 1.32], [Date.UTC(2019, 5, 9), 1.07], [Date.UTC(2019, 6, 6), 1.01], [Date.UTC(2019, 7, 5), 1.02], [Date.UTC(2019, 8, 9), 1.08], [Date.UTC(2019, 9, 5), 1.23], [Date.UTC(2019, 10, 3), 0.96], [Date.UTC(2019, 11, 6), 0.93], [Date.UTC(2020, 0, 5), 0.83], [Date.UTC(2020, 1, 4), 0.60], [Date.UTC(2020, 2, 4), 0.77], [Date.UTC(2020, 3, 2), 4.72], [Date.UTC(2020, 4, 2), 4.18], [Date.UTC(2020, 5, 1), 4.69], [Date.UTC(2020, 6, 4), 5.23], [Date.UTC(2020, 7, 2), 4.66], [Date.UTC(2020, 8, 6), 4.12], [Date.UTC(2020, 9, 4), 3.97], [Date.UTC(2020, 10, 3), 4.01], [Date.UTC(2020, 11, 3), 3.92], [Date.UTC(2021, 0, 2), 3.84], [Date.UTC(2021, 1, 6), 4.33], [Date.UTC(2021, 2, 4), 4.85], [Date.UTC(2021, 3, 4), 4.55], [Date.UTC(2021, 4, 2), 4.02], [Date.UTC(2021, 5, 5), 4.01], [Date.UTC(2021, 6, 4), 4.50], [Date.UTC(2021, 7, 3), 4.67], [Date.UTC(2021, 8, 11), 4.62], [Date.UTC(2021, 9, 6), 5.24], [Date.UTC(2021, 10, 6), 5.72], [Date.UTC(2021, 11, 5), 5.40]]}, {name : 'JavaScript',data : [[Date.UTC(2001, 5, 30), 1.55], [Date.UTC(2001, 6, 30), 1.72], [Date.UTC(2001, 7, 30), 1.66], [Date.UTC(2001, 8, 28), 1.63], [Date.UTC(2001, 9, 26), 1.51], [Date.UTC(2001, 10, 28), 1.47], [Date.UTC(2001, 11, 31), 1.46], [Date.UTC(2002, 0, 30), 2.73], [Date.UTC(2002, 1, 27), 1.48], [Date.UTC(2002, 2, 29), 1.47], [Date.UTC(2002, 3, 29), 1.37], [Date.UTC(2002, 4, 29), 1.36], [Date.UTC(2002, 5, 29), 1.43], [Date.UTC(2002, 6, 31), 1.15], [Date.UTC(2002, 7, 29), 2.02], [Date.UTC(2002, 8, 29), 1.91], [Date.UTC(2002, 9, 30), 1.98], [Date.UTC(2002, 10, 29), 2.49], [Date.UTC(2002, 11, 31), 2.42], [Date.UTC(2003, 0, 31), 2.92], [Date.UTC(2003, 1, 28), 2.81], [Date.UTC(2003, 2, 31), 2.63], [Date.UTC(2003, 3, 30), 3.26], [Date.UTC(2003, 4, 30), 1.72], [Date.UTC(2003, 5, 30), 1.69], [Date.UTC(2003, 6, 31), 1.79], [Date.UTC(2003, 7, 31), 1.90], [Date.UTC(2003, 8, 30), 1.66], [Date.UTC(2003, 9, 31), 1.92], [Date.UTC(2003, 10, 30), 1.74], [Date.UTC(2003, 11, 31), 1.74], [Date.UTC(2004, 0, 31), 2.14], [Date.UTC(2004, 1, 29), 2.06], [Date.UTC(2004, 2, 31), 1.78], [Date.UTC(2004, 3, 30), 1.78], [Date.UTC(2004, 4, 30), 1.45], [Date.UTC(2004, 5, 30), 1.61], [Date.UTC(2004, 6, 31), 1.68], [Date.UTC(2004, 7, 30), 1.51], [Date.UTC(2004, 8, 30), 1.27], [Date.UTC(2004, 9, 31), 1.20], [Date.UTC(2004, 10, 30), 1.59], [Date.UTC(2004, 11, 31), 1.70], [Date.UTC(2005, 0, 31), 1.78], [Date.UTC(2005, 1, 28), 1.65], [Date.UTC(2005, 2, 31), 1.64], [Date.UTC(2005, 3, 30), 1.44], [Date.UTC(2005, 4, 31), 1.39], [Date.UTC(2005, 5, 30), 1.78], [Date.UTC(2005, 6, 31), 1.92], [Date.UTC(2005, 7, 31), 1.77], [Date.UTC(2005, 8, 30), 2.04], [Date.UTC(2005, 11, 3), 1.84], [Date.UTC(2006, 0, 4), 1.54], [Date.UTC(2006, 1, 2), 1.51], [Date.UTC(2006, 2, 1), 1.73], [Date.UTC(2006, 3, 2), 1.57], [Date.UTC(2006, 4, 1), 2.19], [Date.UTC(2006, 5, 1), 1.46], [Date.UTC(2006, 6, 2), 2.11], [Date.UTC(2006, 7, 2), 2.02], [Date.UTC(2006, 8, 2), 2.44], [Date.UTC(2006, 9, 1), 2.20], [Date.UTC(2006, 10, 2), 2.31], [Date.UTC(2006, 11, 1), 2.56], [Date.UTC(2007, 0, 2), 2.84], [Date.UTC(2007, 1, 3), 2.98], [Date.UTC(2007, 2, 3), 3.49], [Date.UTC(2007, 3, 1), 3.14], [Date.UTC(2007, 4, 5), 3.07], [Date.UTC(2007, 5, 2), 2.62], [Date.UTC(2007, 6, 2), 2.51], [Date.UTC(2007, 7, 5), 2.58], [Date.UTC(2007, 8, 2), 2.72], [Date.UTC(2007, 9, 4), 2.68], [Date.UTC(2007, 10, 4), 2.93], [Date.UTC(2007, 11, 3), 2.73], [Date.UTC(2008, 0, 3), 3.20], [Date.UTC(2008, 1, 7), 2.33], [Date.UTC(2008, 5, 1), 2.93], [Date.UTC(2008, 6, 2), 2.76], [Date.UTC(2008, 7, 3), 2.89], [Date.UTC(2008, 8, 3), 3.13], [Date.UTC(2008, 9, 6), 2.67], [Date.UTC(2008, 10, 2), 2.93], [Date.UTC(2008, 11, 3), 2.97], [Date.UTC(2009, 0, 2), 3.36], [Date.UTC(2009, 1, 1), 3.54], [Date.UTC(2009, 2, 5), 3.61], [Date.UTC(2009, 3, 7), 3.68], [Date.UTC(2009, 4, 1), 3.55], [Date.UTC(2009, 5, 4), 4.02], [Date.UTC(2009, 6, 2), 3.51], [Date.UTC(2009, 7, 1), 2.81], [Date.UTC(2009, 8, 5), 3.00], [Date.UTC(2009, 9, 2), 3.03], [Date.UTC(2009, 10, 2), 2.92], [Date.UTC(2009, 11, 2), 3.51], [Date.UTC(2010, 0, 5), 2.71], [Date.UTC(2010, 1, 7), 2.64], [Date.UTC(2010, 2, 7), 2.65], [Date.UTC(2010, 3, 5), 2.47], [Date.UTC(2010, 4, 15), 2.08], [Date.UTC(2010, 6, 6), 2.43], [Date.UTC(2010, 6, 30), 2.40], [Date.UTC(2010, 8, 11), 1.66], [Date.UTC(2010, 9, 2), 1.66], [Date.UTC(2010, 10, 3), 1.66], [Date.UTC(2010, 11, 7), 1.51], [Date.UTC(2011, 0, 2), 1.59], [Date.UTC(2011, 1, 8), 2.56], [Date.UTC(2011, 2, 8), 1.87], [Date.UTC(2011, 3, 3), 1.51], [Date.UTC(2011, 4, 2), 1.39], [Date.UTC(2011, 5, 5), 1.50], [Date.UTC(2011, 5, 27), 1.50], [Date.UTC(2011, 6, 8), 2.24], [Date.UTC(2011, 7, 3), 1.56], [Date.UTC(2011, 8, 10), 1.47], [Date.UTC(2011, 9, 9), 2.19], [Date.UTC(2011, 10, 7), 2.56], [Date.UTC(2011, 11, 4), 2.20], [Date.UTC(2012, 0, 8), 2.32], [Date.UTC(2012, 1, 5), 2.46], [Date.UTC(2012, 2, 11), 3.39], [Date.UTC(2012, 3, 8), 2.88], [Date.UTC(2012, 4, 9), 2.13], [Date.UTC(2012, 5, 10), 1.47], [Date.UTC(2012, 6, 4), 1.45], [Date.UTC(2012, 7, 10), 1.37], [Date.UTC(2012, 8, 2), 1.33], [Date.UTC(2012, 9, 5), 1.26], [Date.UTC(2012, 10, 4), 1.28], [Date.UTC(2012, 11, 2), 1.32], [Date.UTC(2013, 0, 5), 1.98], [Date.UTC(2013, 1, 8), 1.42], [Date.UTC(2013, 2, 11), 1.37], [Date.UTC(2013, 3, 7), 1.51], [Date.UTC(2013, 4, 8), 1.54], [Date.UTC(2013, 5, 9), 1.65], [Date.UTC(2013, 6, 7), 1.84], [Date.UTC(2013, 6, 12), 1.84], [Date.UTC(2013, 7, 4), 2.09], [Date.UTC(2013, 8, 11), 2.01], [Date.UTC(2013, 9, 10), 2.04], [Date.UTC(2013, 10, 9), 2.05], [Date.UTC(2013, 11, 6), 1.85], [Date.UTC(2014, 0, 1), 1.58], [Date.UTC(2014, 1, 8), 1.93], [Date.UTC(2014, 2, 3), 1.90], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.79], [Date.UTC(2014, 5, 8), 2.00], [Date.UTC(2014, 6, 6), 1.81], [Date.UTC(2014, 7, 11), 2.17], [Date.UTC(2014, 8, 1), 2.45], [Date.UTC(2014, 9, 3), 1.77], [Date.UTC(2014, 10, 8), 2.09], [Date.UTC(2014, 11, 7), 2.43], [Date.UTC(2015, 0, 6), 3.27], [Date.UTC(2015, 1, 5), 3.51], [Date.UTC(2015, 2, 7), 3.63], [Date.UTC(2015, 3, 13), 3.30], [Date.UTC(2015, 4, 13), 3.13], [Date.UTC(2015, 5, 6), 2.30], [Date.UTC(2015, 6, 12), 2.19], [Date.UTC(2015, 7, 6), 2.16], [Date.UTC(2015, 8, 5), 2.34], [Date.UTC(2015, 9, 4), 2.29], [Date.UTC(2015, 10, 7), 2.47], [Date.UTC(2015, 11, 4), 2.36], [Date.UTC(2016, 0, 2), 2.57], [Date.UTC(2016, 1, 2), 2.20], [Date.UTC(2016, 2, 3), 2.33], [Date.UTC(2016, 3, 7), 2.57], [Date.UTC(2016, 4, 6), 2.34], [Date.UTC(2016, 5, 5), 2.58], [Date.UTC(2016, 6, 4), 2.64], [Date.UTC(2016, 7, 6), 2.71], [Date.UTC(2016, 8, 8), 2.93], [Date.UTC(2016, 9, 7), 2.75], [Date.UTC(2016, 10, 5), 2.71], [Date.UTC(2016, 11, 4), 2.86], [Date.UTC(2017, 0, 7), 2.85], [Date.UTC(2017, 1, 8), 2.87], [Date.UTC(2017, 2, 7), 2.67], [Date.UTC(2017, 3, 9), 2.85], [Date.UTC(2017, 4, 6), 3.07], [Date.UTC(2017, 5, 3), 3.02], [Date.UTC(2017, 6, 7), 2.61], [Date.UTC(2017, 7, 2), 2.10], [Date.UTC(2017, 8, 6), 2.02], [Date.UTC(2017, 9, 5), 3.01], [Date.UTC(2017, 10, 12), 2.97], [Date.UTC(2017, 11, 9), 2.47], [Date.UTC(2018, 0, 3), 3.47], [Date.UTC(2018, 1, 8), 3.16], [Date.UTC(2018, 2, 7), 3.92], [Date.UTC(2018, 3, 1), 3.49], [Date.UTC(2018, 4, 6), 2.92], [Date.UTC(2018, 5, 10), 2.50], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.41], [Date.UTC(2018, 8, 3), 2.13], [Date.UTC(2018, 9, 5), 2.28], [Date.UTC(2018, 10, 8), 2.66], [Date.UTC(2018, 11, 2), 3.06], [Date.UTC(2019, 0, 4), 3.30], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 2.43], [Date.UTC(2019, 3, 7), 2.51], [Date.UTC(2019, 4, 4), 2.69], [Date.UTC(2019, 5, 9), 2.72], [Date.UTC(2019, 6, 6), 2.30], [Date.UTC(2019, 7, 5), 2.26], [Date.UTC(2019, 8, 9), 2.13], [Date.UTC(2019, 9, 5), 2.08], [Date.UTC(2019, 10, 3), 1.93], [Date.UTC(2019, 11, 6), 2.09], [Date.UTC(2020, 0, 5), 2.45], [Date.UTC(2020, 1, 4), 2.06], [Date.UTC(2020, 2, 4), 2.05], [Date.UTC(2020, 3, 2), 2.38], [Date.UTC(2020, 4, 2), 2.68], [Date.UTC(2020, 5, 1), 2.27], [Date.UTC(2020, 6, 4), 2.48], [Date.UTC(2020, 7, 2), 2.87], [Date.UTC(2020, 8, 6), 2.54], [Date.UTC(2020, 9, 4), 2.14], [Date.UTC(2020, 10, 3), 2.03], [Date.UTC(2020, 11, 3), 2.35], [Date.UTC(2021, 0, 2), 2.20], [Date.UTC(2021, 1, 6), 2.27], [Date.UTC(2021, 2, 4), 2.11], [Date.UTC(2021, 3, 4), 2.44], [Date.UTC(2021, 4, 2), 2.45], [Date.UTC(2021, 5, 5), 2.33], [Date.UTC(2021, 6, 4), 2.71], [Date.UTC(2021, 7, 3), 2.95], [Date.UTC(2021, 8, 11), 2.55], [Date.UTC(2021, 9, 6), 2.19], [Date.UTC(2021, 10, 6), 2.66], [Date.UTC(2021, 11, 5), 2.30]]}, {name : 'Assembly language',data : [[Date.UTC(2010, 11, 7), 0.66], [Date.UTC(2011, 0, 2), 0.86], [Date.UTC(2011, 1, 8), 1.27], [Date.UTC(2011, 2, 8), 1.34], [Date.UTC(2011, 3, 3), 0.97], [Date.UTC(2011, 4, 2), 1.04], [Date.UTC(2011, 5, 5), 0.67], [Date.UTC(2011, 5, 27), 0.67], [Date.UTC(2011, 6, 8), 0.62], [Date.UTC(2011, 7, 3), 0.60], [Date.UTC(2011, 8, 10), 0.59], [Date.UTC(2011, 9, 9), 0.62], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.56], [Date.UTC(2012, 0, 8), 0.54], [Date.UTC(2012, 1, 5), 0.52], [Date.UTC(2012, 2, 11), 0.43], [Date.UTC(2012, 3, 8), 0.47], [Date.UTC(2012, 4, 9), 0.52], [Date.UTC(2012, 5, 10), 0.54], [Date.UTC(2012, 6, 4), 0.55], [Date.UTC(2012, 7, 10), 0.50], [Date.UTC(2012, 8, 2), 0.53], [Date.UTC(2012, 9, 5), 0.57], [Date.UTC(2012, 10, 4), 0.59], [Date.UTC(2012, 11, 2), 0.58], [Date.UTC(2013, 0, 5), 0.63], [Date.UTC(2013, 1, 8), 0.64], [Date.UTC(2013, 2, 11), 0.63], [Date.UTC(2013, 3, 7), 0.71], [Date.UTC(2013, 4, 8), 0.64], [Date.UTC(2013, 5, 9), 0.50], [Date.UTC(2013, 6, 7), 0.58], [Date.UTC(2013, 6, 12), 0.58], [Date.UTC(2013, 7, 4), 0.62], [Date.UTC(2013, 8, 11), 0.48], [Date.UTC(2013, 9, 10), 0.47], [Date.UTC(2013, 10, 9), 0.53], [Date.UTC(2013, 11, 6), 0.58], [Date.UTC(2014, 0, 1), 0.49], [Date.UTC(2014, 1, 8), 0.40], [Date.UTC(2014, 2, 3), 0.73], [Date.UTC(2014, 3, 10), 0.85], [Date.UTC(2014, 4, 7), 0.77], [Date.UTC(2014, 5, 8), 0.77], [Date.UTC(2014, 6, 6), 0.78], [Date.UTC(2014, 7, 11), 0.65], [Date.UTC(2014, 8, 1), 0.58], [Date.UTC(2014, 9, 3), 0.41], [Date.UTC(2014, 10, 8), 0.60], [Date.UTC(2014, 11, 7), 0.52], [Date.UTC(2015, 0, 6), 1.17], [Date.UTC(2015, 1, 5), 0.75], [Date.UTC(2015, 2, 7), 0.62], [Date.UTC(2015, 3, 13), 0.66], [Date.UTC(2015, 4, 13), 0.76], [Date.UTC(2015, 5, 6), 0.75], [Date.UTC(2015, 6, 12), 1.54], [Date.UTC(2015, 7, 6), 1.76], [Date.UTC(2015, 8, 5), 1.81], [Date.UTC(2015, 9, 4), 1.57], [Date.UTC(2015, 10, 7), 1.88], [Date.UTC(2015, 11, 4), 1.93], [Date.UTC(2016, 0, 2), 2.09], [Date.UTC(2016, 1, 2), 1.83], [Date.UTC(2016, 2, 3), 1.85], [Date.UTC(2016, 3, 7), 2.19], [Date.UTC(2016, 4, 6), 1.88], [Date.UTC(2016, 5, 5), 2.12], [Date.UTC(2016, 6, 4), 2.28], [Date.UTC(2016, 7, 6), 2.36], [Date.UTC(2016, 8, 8), 2.42], [Date.UTC(2016, 9, 7), 2.23], [Date.UTC(2016, 10, 5), 2.44], [Date.UTC(2016, 11, 4), 2.54], [Date.UTC(2017, 0, 7), 2.70], [Date.UTC(2017, 1, 8), 2.11], [Date.UTC(2017, 2, 7), 2.23], [Date.UTC(2017, 3, 9), 2.17], [Date.UTC(2017, 4, 6), 2.86], [Date.UTC(2017, 5, 3), 2.25], [Date.UTC(2017, 6, 7), 2.24], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.64], [Date.UTC(2017, 9, 5), 2.37], [Date.UTC(2017, 10, 12), 1.72], [Date.UTC(2017, 11, 9), 1.47], [Date.UTC(2018, 0, 3), 2.06], [Date.UTC(2018, 1, 8), 1.83], [Date.UTC(2018, 2, 7), 1.71], [Date.UTC(2018, 3, 1), 1.65], [Date.UTC(2018, 4, 6), 1.00], [Date.UTC(2018, 5, 10), 0.92], [Date.UTC(2018, 6, 7), 1.15], [Date.UTC(2018, 7, 1), 1.41], [Date.UTC(2018, 8, 3), 1.23], [Date.UTC(2018, 9, 5), 1.25], [Date.UTC(2018, 10, 8), 1.11], [Date.UTC(2018, 11, 2), 1.37], [Date.UTC(2019, 0, 4), 1.20], [Date.UTC(2019, 1, 6), 1.38], [Date.UTC(2019, 2, 2), 1.41], [Date.UTC(2019, 3, 7), 1.71], [Date.UTC(2019, 4, 4), 1.82], [Date.UTC(2019, 5, 9), 1.48], [Date.UTC(2019, 6, 6), 1.39], [Date.UTC(2019, 7, 5), 1.11], [Date.UTC(2019, 8, 9), 1.38], [Date.UTC(2019, 9, 5), 1.31], [Date.UTC(2019, 10, 3), 1.02], [Date.UTC(2019, 11, 6), 1.07], [Date.UTC(2020, 0, 5), 0.88], [Date.UTC(2020, 1, 4), 1.11], [Date.UTC(2020, 2, 4), 1.25], [Date.UTC(2020, 3, 2), 1.16], [Date.UTC(2020, 4, 2), 1.12], [Date.UTC(2020, 5, 1), 0.97], [Date.UTC(2020, 6, 4), 0.94], [Date.UTC(2020, 7, 2), 1.04], [Date.UTC(2020, 8, 6), 1.30], [Date.UTC(2020, 9, 4), 1.08], [Date.UTC(2020, 10, 3), 1.17], [Date.UTC(2020, 11, 3), 1.35], [Date.UTC(2021, 0, 2), 1.64], [Date.UTC(2021, 1, 6), 1.65], [Date.UTC(2021, 2, 4), 1.97], [Date.UTC(2021, 3, 4), 2.32], [Date.UTC(2021, 4, 2), 2.43], [Date.UTC(2021, 5, 5), 2.05], [Date.UTC(2021, 6, 4), 2.40], [Date.UTC(2021, 7, 3), 2.03], [Date.UTC(2021, 8, 11), 2.42], [Date.UTC(2021, 9, 6), 2.06], [Date.UTC(2021, 10, 6), 2.52], [Date.UTC(2021, 11, 5), 2.25]]}, {name : 'SQL',data : [[Date.UTC(2001, 5, 30), 2.96], [Date.UTC(2001, 6, 30), 2.77], [Date.UTC(2001, 7, 30), 2.38], [Date.UTC(2001, 8, 28), 2.36], [Date.UTC(2001, 9, 26), 2.24], [Date.UTC(2001, 10, 28), 1.84], [Date.UTC(2001, 11, 31), 1.87], [Date.UTC(2002, 0, 30), 1.94], [Date.UTC(2002, 1, 27), 2.09], [Date.UTC(2002, 2, 29), 2.06], [Date.UTC(2002, 3, 29), 2.33], [Date.UTC(2002, 4, 29), 2.36], [Date.UTC(2002, 5, 29), 2.53], [Date.UTC(2002, 6, 31), 2.66], [Date.UTC(2002, 7, 29), 2.65], [Date.UTC(2002, 8, 29), 2.54], [Date.UTC(2002, 9, 30), 2.64], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.52], [Date.UTC(2003, 0, 31), 2.56], [Date.UTC(2003, 1, 28), 2.51], [Date.UTC(2003, 2, 31), 2.56], [Date.UTC(2003, 3, 30), 2.65], [Date.UTC(2003, 4, 30), 3.12], [Date.UTC(2003, 5, 30), 3.04], [Date.UTC(2003, 6, 31), 2.99], [Date.UTC(2003, 7, 31), 3.24], [Date.UTC(2003, 8, 30), 3.72], [Date.UTC(2003, 9, 31), 3.70], [Date.UTC(2003, 10, 30), 2.93], [Date.UTC(2003, 11, 31), 3.10], [Date.UTC(2004, 0, 31), 3.51], [Date.UTC(2004, 1, 29), 3.10], [Date.UTC(2004, 2, 31), 2.97], [Date.UTC(2004, 3, 30), 2.44], [Date.UTC(2018, 1, 8), 2.36], [Date.UTC(2018, 2, 7), 2.69], [Date.UTC(2018, 3, 1), 2.65], [Date.UTC(2018, 4, 6), 1.99], [Date.UTC(2018, 5, 10), 2.34], [Date.UTC(2018, 6, 7), 2.33], [Date.UTC(2018, 7, 1), 2.32], [Date.UTC(2018, 8, 3), 2.06], [Date.UTC(2018, 9, 5), 2.04], [Date.UTC(2018, 10, 8), 1.84], [Date.UTC(2018, 11, 2), 2.18], [Date.UTC(2019, 0, 4), 2.28], [Date.UTC(2019, 1, 6), 1.90], [Date.UTC(2019, 2, 2), 1.93], [Date.UTC(2019, 3, 7), 2.27], [Date.UTC(2019, 4, 4), 2.56], [Date.UTC(2019, 5, 9), 2.22], [Date.UTC(2019, 6, 6), 1.98], [Date.UTC(2019, 7, 5), 1.63], [Date.UTC(2019, 8, 9), 1.94], [Date.UTC(2019, 9, 5), 1.93], [Date.UTC(2019, 10, 3), 1.69], [Date.UTC(2019, 11, 6), 1.84], [Date.UTC(2020, 0, 5), 1.50], [Date.UTC(2020, 1, 4), 1.53], [Date.UTC(2020, 2, 4), 1.83], [Date.UTC(2020, 3, 2), 2.17], [Date.UTC(2020, 4, 2), 2.09], [Date.UTC(2020, 5, 1), 1.73], [Date.UTC(2020, 6, 4), 1.40], [Date.UTC(2020, 7, 2), 1.46], [Date.UTC(2020, 8, 6), 1.76], [Date.UTC(2020, 9, 4), 1.57], [Date.UTC(2020, 10, 3), 1.54], [Date.UTC(2020, 11, 3), 1.53], [Date.UTC(2021, 0, 2), 1.61], [Date.UTC(2021, 1, 6), 1.72], [Date.UTC(2021, 2, 4), 1.87], [Date.UTC(2021, 3, 4), 1.83], [Date.UTC(2021, 4, 2), 1.71], [Date.UTC(2021, 5, 5), 1.88], [Date.UTC(2021, 6, 4), 1.53], [Date.UTC(2021, 7, 3), 1.47], [Date.UTC(2021, 8, 11), 1.80], [Date.UTC(2021, 9, 6), 2.17], [Date.UTC(2021, 10, 6), 2.11], [Date.UTC(2021, 11, 5), 1.79]]}, {name : 'Swift',data : [[Date.UTC(2014, 6, 6), 1.05], [Date.UTC(2014, 7, 11), 0.67], [Date.UTC(2014, 8, 1), 0.85], [Date.UTC(2014, 9, 3), 0.76], [Date.UTC(2014, 10, 8), 0.83], [Date.UTC(2014, 11, 7), 1.06], [Date.UTC(2015, 0, 6), 0.75], [Date.UTC(2015, 1, 5), 0.72], [Date.UTC(2015, 2, 7), 0.82], [Date.UTC(2015, 3, 13), 0.88], [Date.UTC(2015, 4, 13), 1.12], [Date.UTC(2015, 5, 6), 1.44], [Date.UTC(2015, 6, 12), 1.23], [Date.UTC(2015, 7, 6), 1.18], [Date.UTC(2015, 8, 5), 1.19], [Date.UTC(2015, 9, 4), 1.28], [Date.UTC(2015, 10, 7), 1.24], [Date.UTC(2015, 11, 4), 1.41], [Date.UTC(2016, 0, 2), 1.36], [Date.UTC(2016, 1, 2), 1.38], [Date.UTC(2016, 2, 3), 1.59], [Date.UTC(2016, 3, 7), 1.48], [Date.UTC(2016, 4, 6), 1.59], [Date.UTC(2016, 5, 5), 1.83], [Date.UTC(2016, 6, 4), 1.96], [Date.UTC(2016, 7, 6), 1.98], [Date.UTC(2016, 8, 8), 1.93], [Date.UTC(2016, 9, 7), 2.00], [Date.UTC(2016, 10, 5), 2.04], [Date.UTC(2016, 11, 4), 2.13], [Date.UTC(2017, 0, 7), 1.93], [Date.UTC(2017, 1, 8), 2.13], [Date.UTC(2017, 2, 7), 2.27], [Date.UTC(2017, 3, 9), 2.29], [Date.UTC(2017, 4, 6), 2.27], [Date.UTC(2017, 5, 3), 2.21], [Date.UTC(2017, 6, 7), 2.25], [Date.UTC(2017, 7, 2), 1.83], [Date.UTC(2017, 8, 6), 1.76], [Date.UTC(2017, 9, 5), 1.67], [Date.UTC(2017, 10, 12), 1.39], [Date.UTC(2017, 11, 9), 1.57], [Date.UTC(2018, 0, 3), 2.38], [Date.UTC(2018, 1, 8), 1.79], [Date.UTC(2018, 2, 7), 2.14], [Date.UTC(2018, 3, 1), 1.53], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.14], [Date.UTC(2018, 6, 7), 1.41], [Date.UTC(2018, 7, 1), 1.38], [Date.UTC(2018, 8, 3), 1.22], [Date.UTC(2018, 9, 5), 1.50], [Date.UTC(2018, 10, 8), 1.45], [Date.UTC(2018, 11, 2), 1.22], [Date.UTC(2019, 0, 4), 1.19], [Date.UTC(2019, 1, 6), 0.92], [Date.UTC(2019, 2, 2), 1.16], [Date.UTC(2019, 3, 7), 0.98], [Date.UTC(2019, 4, 4), 1.15], [Date.UTC(2019, 5, 9), 1.42], [Date.UTC(2019, 6, 6), 1.12], [Date.UTC(2019, 7, 5), 0.89], [Date.UTC(2019, 8, 9), 1.10], [Date.UTC(2019, 9, 5), 1.36], [Date.UTC(2019, 10, 3), 1.65], [Date.UTC(2019, 11, 6), 1.49], [Date.UTC(2020, 0, 5), 1.80], [Date.UTC(2020, 1, 4), 1.46], [Date.UTC(2020, 2, 4), 1.24], [Date.UTC(2020, 3, 2), 1.52], [Date.UTC(2020, 4, 2), 1.79], [Date.UTC(2020, 5, 1), 1.46], [Date.UTC(2020, 6, 4), 1.43], [Date.UTC(2020, 7, 2), 1.42], [Date.UTC(2020, 8, 6), 1.38], [Date.UTC(2020, 9, 4), 1.09], [Date.UTC(2020, 10, 3), 1.35], [Date.UTC(2020, 11, 3), 1.22], [Date.UTC(2021, 0, 2), 1.43], [Date.UTC(2021, 1, 6), 1.13], [Date.UTC(2021, 2, 4), 0.95], [Date.UTC(2021, 3, 4), 1.19], [Date.UTC(2021, 4, 2), 1.14], [Date.UTC(2021, 5, 5), 1.10], [Date.UTC(2021, 6, 4), 1.07], [Date.UTC(2021, 7, 3), 0.98], [Date.UTC(2021, 8, 11), 1.07], [Date.UTC(2021, 9, 6), 1.11], [Date.UTC(2021, 10, 6), 1.43], [Date.UTC(2021, 11, 5), 1.76]]}\n"," ]"]},{"cell_type":"markdown","metadata":{},"source":["[tiobe202208.txt](https://data.educoder.net/api/attachments/3395652?type=text/plain)"]},{"cell_type":"markdown","metadata":{},"source":["复制方括号中的部分放到双引号中,转为字符串类型\n","替换掉'name : '、',data '、'Date.UTC'为空字符串,再用 eval()函数将字符串写为元素为字典的列表,每个字典中只有一个元素。\n","替换后的数据如下:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["tiobe = [\n","{name : 'Python',data : [[Date.UTC(2001, 5, 30), 1.25], [Date.UTC(2001, 6, 30), 1.13], [Date.UTC(2001, 7, 30), 1.20], [Date.UTC(2001, 8, 28), 1.17], [Date.UTC(2001, 9, 26), 1.28], [Date.UTC(2001, 10, 28), 1.23], [Date.UTC(2001, 11, 31), 1.04], [Date.UTC(2002, 0, 30), 1.02], [Date.UTC(2002, 1, 27), 0.99], [Date.UTC(2002, 2, 29), 0.99], [Date.UTC(2002, 3, 29), 1.07], [Date.UTC(2002, 4, 29), 1.06], [Date.UTC(2002, 5, 29), 1.13], [Date.UTC(2002, 6, 31), 1.08], [Date.UTC(2002, 7, 29), 1.22], [Date.UTC(2002, 8, 29), 1.08], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.00], [Date.UTC(2002, 11, 31), 1.00], [Date.UTC(2003, 0, 31), 1.03], [Date.UTC(2003, 1, 28), 0.97], [Date.UTC(2003, 2, 31), 0.99], [Date.UTC(2003, 3, 30), 1.01], [Date.UTC(2003, 4, 30), 1.16], [Date.UTC(2003, 5, 30), 1.28], [Date.UTC(2003, 6, 31), 1.30], [Date.UTC(2003, 7, 31), 1.42], [Date.UTC(2003, 8, 30), 1.49], [Date.UTC(2003, 9, 31), 1.77], [Date.UTC(2003, 10, 30), 1.10], [Date.UTC(2003, 11, 31), 1.13], [Date.UTC(2004, 0, 31), 1.01], [Date.UTC(2004, 1, 29), 1.02], [Date.UTC(2004, 2, 31), 1.01], [Date.UTC(2004, 3, 30), 4.57], [Date.UTC(2004, 4, 30), 6.58], [Date.UTC(2004, 5, 30), 4.96], [Date.UTC(2004, 6, 31), 4.70], [Date.UTC(2004, 7, 30), 5.60], [Date.UTC(2004, 8, 30), 4.44], [Date.UTC(2004, 9, 31), 5.20], [Date.UTC(2004, 10, 30), 3.03], [Date.UTC(2004, 11, 31), 2.84], [Date.UTC(2005, 0, 31), 2.51], [Date.UTC(2005, 1, 28), 2.42], [Date.UTC(2005, 2, 31), 2.70], [Date.UTC(2005, 3, 30), 2.48], [Date.UTC(2005, 4, 31), 2.80], [Date.UTC(2005, 5, 30), 2.52], [Date.UTC(2005, 6, 31), 2.88], [Date.UTC(2005, 7, 31), 3.03], [Date.UTC(2005, 8, 30), 2.88], [Date.UTC(2005, 11, 3), 2.68], [Date.UTC(2006, 0, 4), 2.60], [Date.UTC(2006, 1, 2), 2.67], [Date.UTC(2006, 2, 1), 3.09], [Date.UTC(2006, 3, 2), 2.76], [Date.UTC(2006, 4, 1), 3.04], [Date.UTC(2006, 5, 1), 3.46], [Date.UTC(2006, 6, 2), 3.02], [Date.UTC(2006, 7, 2), 3.07], [Date.UTC(2006, 8, 2), 3.14], [Date.UTC(2006, 9, 1), 3.47], [Date.UTC(2006, 10, 2), 3.64], [Date.UTC(2006, 11, 1), 3.76], [Date.UTC(2007, 0, 2), 3.50], [Date.UTC(2007, 1, 3), 3.57], [Date.UTC(2007, 2, 3), 3.90], [Date.UTC(2007, 3, 1), 3.81], [Date.UTC(2007, 4, 5), 3.78], [Date.UTC(2007, 5, 2), 3.16], [Date.UTC(2007, 6, 2), 3.02], [Date.UTC(2007, 7, 5), 2.75], [Date.UTC(2007, 8, 2), 3.03], [Date.UTC(2007, 9, 4), 3.43], [Date.UTC(2007, 10, 4), 4.23], [Date.UTC(2007, 11, 3), 4.70], [Date.UTC(2008, 0, 3), 5.54], [Date.UTC(2008, 1, 7), 4.76], [Date.UTC(2008, 5, 1), 4.90], [Date.UTC(2008, 6, 2), 4.97], [Date.UTC(2008, 7, 3), 4.98], [Date.UTC(2008, 8, 3), 5.01], [Date.UTC(2008, 9, 6), 4.56], [Date.UTC(2008, 10, 2), 5.14], [Date.UTC(2008, 11, 3), 4.17], [Date.UTC(2009, 0, 2), 4.73], [Date.UTC(2009, 1, 1), 4.57], [Date.UTC(2009, 2, 5), 5.18], [Date.UTC(2009, 3, 7), 6.08], [Date.UTC(2009, 4, 1), 5.55], [Date.UTC(2009, 5, 4), 4.76], [Date.UTC(2009, 6, 2), 4.43], [Date.UTC(2009, 7, 1), 4.49], [Date.UTC(2009, 8, 5), 3.93], [Date.UTC(2009, 9, 2), 3.90], [Date.UTC(2009, 10, 2), 4.67], [Date.UTC(2009, 11, 2), 5.19], [Date.UTC(2010, 0, 5), 4.45], [Date.UTC(2010, 1, 7), 4.31], [Date.UTC(2010, 2, 7), 4.23], [Date.UTC(2010, 3, 5), 4.21], [Date.UTC(2010, 4, 15), 4.10], [Date.UTC(2010, 6, 6), 4.22], [Date.UTC(2010, 6, 30), 4.22], [Date.UTC(2010, 8, 11), 4.58], [Date.UTC(2010, 9, 2), 4.86], [Date.UTC(2010, 10, 3), 5.68], [Date.UTC(2010, 11, 7), 6.48], [Date.UTC(2011, 0, 2), 6.26], [Date.UTC(2011, 1, 8), 7.04], [Date.UTC(2011, 2, 8), 5.74], [Date.UTC(2011, 3, 3), 4.93], [Date.UTC(2011, 4, 2), 4.58], [Date.UTC(2011, 5, 5), 3.90], [Date.UTC(2011, 5, 27), 3.90], [Date.UTC(2011, 6, 8), 3.58], [Date.UTC(2011, 7, 3), 3.41], [Date.UTC(2011, 8, 10), 4.00], [Date.UTC(2011, 9, 9), 3.94], [Date.UTC(2011, 10, 7), 3.62], [Date.UTC(2011, 11, 4), 3.49], [Date.UTC(2012, 0, 8), 3.21], [Date.UTC(2012, 1, 5), 3.15], [Date.UTC(2012, 2, 11), 3.29], [Date.UTC(2012, 3, 8), 3.66], [Date.UTC(2012, 4, 9), 3.82], [Date.UTC(2012, 5, 10), 3.85], [Date.UTC(2012, 6, 4), 4.00], [Date.UTC(2012, 7, 10), 3.88], [Date.UTC(2012, 8, 2), 3.86], [Date.UTC(2012, 9, 5), 3.90], [Date.UTC(2012, 10, 4), 4.06], [Date.UTC(2012, 11, 2), 3.85], [Date.UTC(2013, 0, 5), 4.17], [Date.UTC(2013, 1, 8), 4.95], [Date.UTC(2013, 2, 11), 4.39], [Date.UTC(2013, 3, 7), 4.44], [Date.UTC(2013, 4, 8), 4.32], [Date.UTC(2013, 5, 9), 4.18], [Date.UTC(2013, 6, 7), 4.03], [Date.UTC(2013, 6, 12), 4.03], [Date.UTC(2013, 7, 4), 3.60], [Date.UTC(2013, 8, 11), 3.17], [Date.UTC(2013, 9, 10), 3.11], [Date.UTC(2013, 10, 9), 3.11], [Date.UTC(2013, 11, 6), 2.21], [Date.UTC(2014, 0, 1), 2.37], [Date.UTC(2014, 1, 8), 2.16], [Date.UTC(2014, 2, 3), 2.02], [Date.UTC(2014, 3, 10), 1.99], [Date.UTC(2014, 4, 7), 3.06], [Date.UTC(2014, 5, 8), 2.71], [Date.UTC(2014, 6, 6), 2.66], [Date.UTC(2014, 7, 11), 3.12], [Date.UTC(2014, 8, 1), 2.78], [Date.UTC(2014, 9, 3), 2.33], [Date.UTC(2014, 10, 8), 2.59], [Date.UTC(2014, 11, 7), 2.29], [Date.UTC(2015, 0, 6), 2.61], [Date.UTC(2015, 1, 5), 2.88], [Date.UTC(2015, 2, 7), 2.61], [Date.UTC(2015, 3, 13), 2.69], [Date.UTC(2015, 4, 13), 3.72], [Date.UTC(2015, 5, 6), 4.00], [Date.UTC(2015, 6, 12), 4.26], [Date.UTC(2015, 7, 6), 4.07], [Date.UTC(2015, 8, 5), 3.66], [Date.UTC(2015, 9, 4), 4.51], [Date.UTC(2015, 10, 7), 3.77], [Date.UTC(2015, 11, 4), 4.43], [Date.UTC(2016, 0, 2), 3.85], [Date.UTC(2016, 1, 2), 4.18], [Date.UTC(2016, 2, 3), 4.26], [Date.UTC(2016, 3, 7), 3.33], [Date.UTC(2016, 4, 6), 3.79], [Date.UTC(2016, 5, 5), 3.90], [Date.UTC(2016, 6, 4), 4.17], [Date.UTC(2016, 7, 6), 4.40], [Date.UTC(2016, 8, 8), 4.30], [Date.UTC(2016, 9, 7), 3.77], [Date.UTC(2016, 10, 5), 3.57], [Date.UTC(2016, 11, 4), 4.24], [Date.UTC(2017, 0, 7), 3.46], [Date.UTC(2017, 1, 8), 4.04], [Date.UTC(2017, 2, 7), 3.92], [Date.UTC(2017, 3, 9), 3.46], [Date.UTC(2017, 4, 6), 3.55], [Date.UTC(2017, 5, 3), 4.33], [Date.UTC(2017, 6, 7), 3.54], [Date.UTC(2017, 7, 2), 3.69], [Date.UTC(2017, 8, 6), 2.98], [Date.UTC(2017, 9, 5), 3.80], [Date.UTC(2017, 10, 12), 4.48], [Date.UTC(2017, 11, 9), 3.78], [Date.UTC(2018, 0, 3), 4.68], [Date.UTC(2018, 1, 8), 5.17], [Date.UTC(2018, 2, 7), 5.87], [Date.UTC(2018, 3, 1), 5.80], [Date.UTC(2018, 4, 6), 5.19], [Date.UTC(2018, 5, 10), 5.76], [Date.UTC(2018, 6, 7), 6.36], [Date.UTC(2018, 7, 1), 6.99], [Date.UTC(2018, 8, 3), 7.65], [Date.UTC(2018, 9, 5), 7.16], [Date.UTC(2018, 10, 8), 7.68], [Date.UTC(2018, 11, 2), 8.38], [Date.UTC(2019, 0, 4), 8.29], [Date.UTC(2019, 1, 6), 7.57], [Date.UTC(2019, 2, 2), 8.26], [Date.UTC(2019, 3, 7), 8.17], [Date.UTC(2019, 4, 4), 7.83], [Date.UTC(2019, 5, 9), 8.53], [Date.UTC(2019, 6, 6), 9.26], [Date.UTC(2019, 7, 5), 10.02], [Date.UTC(2019, 8, 9), 9.87], [Date.UTC(2019, 9, 5), 9.09], [Date.UTC(2019, 10, 3), 9.84], [Date.UTC(2019, 11, 6), 10.31], [Date.UTC(2020, 0, 5), 9.70], [Date.UTC(2020, 1, 4), 9.35], [Date.UTC(2020, 2, 4), 10.11], [Date.UTC(2020, 3, 2), 9.31], [Date.UTC(2020, 4, 2), 9.12], [Date.UTC(2020, 5, 1), 8.36], [Date.UTC(2020, 6, 4), 9.09], [Date.UTC(2020, 7, 2), 9.69], [Date.UTC(2020, 8, 6), 10.47], [Date.UTC(2020, 9, 4), 11.28], [Date.UTC(2020, 10, 3), 12.12], [Date.UTC(2020, 11, 3), 12.21], [Date.UTC(2021, 0, 2), 11.72], [Date.UTC(2021, 1, 6), 10.86], [Date.UTC(2021, 2, 4), 10.31], [Date.UTC(2021, 3, 4), 11.03], [Date.UTC(2021, 4, 2), 11.87], [Date.UTC(2021, 5, 5), 11.84], [Date.UTC(2021, 6, 4), 10.96], [Date.UTC(2021, 7, 3), 11.86], [Date.UTC(2021, 8, 11), 11.67], [Date.UTC(2021, 9, 6), 11.27], [Date.UTC(2021, 10, 6), 11.77], [Date.UTC(2021, 11, 5), 12.90], [Date.UTC(2022, 0, 1), 13.58], [Date.UTC(2022, 1, 2), 15.33], [Date.UTC(2022, 2, 2), 14.26], [Date.UTC(2022, 3, 5), 13.92], [Date.UTC(2022, 4, 3), 12.74], [Date.UTC(2022, 5, 4), 12.20], [Date.UTC(2022, 6, 2), 13.44], [Date.UTC(2022, 7, 2), 15.42]]}, \n","{name : 'C',data : [[Date.UTC(2001, 5, 30), 20.24], [Date.UTC(2001, 6, 30), 20.77], [Date.UTC(2001, 7, 30), 20.75], [Date.UTC(2001, 8, 28), 20.77], [Date.UTC(2001, 9, 26), 19.75], [Date.UTC(2001, 10, 28), 19.21], [Date.UTC(2001, 11, 31), 20.14], [Date.UTC(2002, 0, 30), 18.83], [Date.UTC(2002, 1, 27), 19.89], [Date.UTC(2002, 2, 29), 19.85], [Date.UTC(2002, 3, 29), 19.82], [Date.UTC(2002, 4, 29), 19.99], [Date.UTC(2002, 5, 29), 19.57], [Date.UTC(2002, 6, 31), 19.25], [Date.UTC(2002, 7, 29), 18.16], [Date.UTC(2002, 8, 29), 18.70], [Date.UTC(2002, 9, 30), 18.73], [Date.UTC(2002, 10, 29), 17.50], [Date.UTC(2002, 11, 31), 17.26], [Date.UTC(2003, 0, 31), 18.25], [Date.UTC(2003, 1, 28), 18.54], [Date.UTC(2003, 2, 31), 17.21], [Date.UTC(2003, 3, 30), 18.02], [Date.UTC(2003, 4, 30), 18.50], [Date.UTC(2003, 5, 30), 18.52], [Date.UTC(2003, 6, 31), 17.97], [Date.UTC(2003, 7, 31), 17.78], [Date.UTC(2003, 8, 30), 18.31], [Date.UTC(2003, 9, 31), 17.00], [Date.UTC(2003, 10, 30), 18.47], [Date.UTC(2003, 11, 31), 18.60], [Date.UTC(2004, 0, 31), 18.20], [Date.UTC(2004, 1, 29), 18.93], [Date.UTC(2004, 2, 31), 17.75], [Date.UTC(2004, 3, 30), 17.95], [Date.UTC(2004, 4, 30), 18.29], [Date.UTC(2004, 5, 30), 17.14], [Date.UTC(2004, 6, 31), 16.33], [Date.UTC(2004, 7, 30), 17.12], [Date.UTC(2004, 8, 30), 18.17], [Date.UTC(2004, 9, 31), 17.99], [Date.UTC(2004, 10, 30), 19.70], [Date.UTC(2004, 11, 31), 20.71], [Date.UTC(2005, 0, 31), 19.82], [Date.UTC(2005, 1, 28), 19.47], [Date.UTC(2005, 2, 31), 18.63], [Date.UTC(2005, 3, 30), 18.52], [Date.UTC(2005, 4, 31), 19.37], [Date.UTC(2005, 5, 30), 19.85], [Date.UTC(2005, 6, 31), 19.47], [Date.UTC(2005, 7, 31), 19.16], [Date.UTC(2005, 8, 30), 18.77], [Date.UTC(2005, 11, 3), 19.63], [Date.UTC(2006, 0, 4), 19.01], [Date.UTC(2006, 1, 2), 18.33], [Date.UTC(2006, 2, 1), 17.79], [Date.UTC(2006, 3, 2), 17.69], [Date.UTC(2006, 4, 1), 17.69], [Date.UTC(2006, 5, 1), 18.25], [Date.UTC(2006, 6, 2), 17.83], [Date.UTC(2006, 7, 2), 17.43], [Date.UTC(2006, 8, 2), 18.06], [Date.UTC(2006, 9, 1), 17.66], [Date.UTC(2006, 10, 2), 17.20], [Date.UTC(2006, 11, 1), 16.62], [Date.UTC(2007, 0, 2), 15.81], [Date.UTC(2007, 1, 3), 16.10], [Date.UTC(2007, 2, 3), 15.63], [Date.UTC(2007, 3, 1), 14.94], [Date.UTC(2007, 4, 5), 15.15], [Date.UTC(2007, 5, 2), 15.97], [Date.UTC(2007, 6, 2), 16.36], [Date.UTC(2007, 7, 5), 15.70], [Date.UTC(2007, 8, 2), 14.91], [Date.UTC(2007, 9, 4), 14.59], [Date.UTC(2007, 10, 4), 13.97], [Date.UTC(2007, 11, 3), 13.17], [Date.UTC(2008, 0, 3), 13.92], [Date.UTC(2008, 1, 7), 14.86], [Date.UTC(2008, 5, 1), 15.51], [Date.UTC(2008, 6, 2), 15.95], [Date.UTC(2008, 7, 3), 16.18], [Date.UTC(2008, 8, 3), 15.38], [Date.UTC(2008, 9, 6), 15.57], [Date.UTC(2008, 10, 2), 15.28], [Date.UTC(2008, 11, 3), 15.02], [Date.UTC(2009, 0, 2), 15.93], [Date.UTC(2009, 1, 1), 15.84], [Date.UTC(2009, 2, 5), 15.86], [Date.UTC(2009, 3, 7), 15.47], [Date.UTC(2009, 4, 1), 16.13], [Date.UTC(2009, 5, 4), 16.78], [Date.UTC(2009, 6, 2), 17.32], [Date.UTC(2009, 7, 1), 17.22], [Date.UTC(2009, 8, 5), 16.86], [Date.UTC(2009, 9, 2), 16.84], [Date.UTC(2009, 10, 2), 17.32], [Date.UTC(2009, 11, 2), 16.28], [Date.UTC(2010, 0, 5), 16.22], [Date.UTC(2010, 1, 7), 16.60], [Date.UTC(2010, 2, 7), 17.28], [Date.UTC(2010, 3, 5), 18.06], [Date.UTC(2010, 4, 15), 18.19], [Date.UTC(2010, 6, 6), 18.48], [Date.UTC(2010, 6, 30), 17.87], [Date.UTC(2010, 8, 11), 17.15], [Date.UTC(2010, 9, 2), 17.18], [Date.UTC(2010, 10, 3), 16.72], [Date.UTC(2010, 11, 7), 16.08], [Date.UTC(2011, 0, 2), 15.82], [Date.UTC(2011, 1, 8), 14.99], [Date.UTC(2011, 2, 8), 15.26], [Date.UTC(2011, 3, 3), 16.16], [Date.UTC(2011, 4, 2), 16.17], [Date.UTC(2011, 5, 5), 16.28], [Date.UTC(2011, 5, 27), 16.28], [Date.UTC(2011, 6, 8), 17.28], [Date.UTC(2011, 7, 3), 17.39], [Date.UTC(2011, 8, 10), 18.00], [Date.UTC(2011, 9, 9), 17.71], [Date.UTC(2011, 10, 7), 17.32], [Date.UTC(2011, 11, 4), 17.06], [Date.UTC(2012, 0, 8), 16.97], [Date.UTC(2012, 1, 5), 16.52], [Date.UTC(2012, 2, 11), 17.09], [Date.UTC(2012, 3, 8), 17.55], [Date.UTC(2012, 4, 9), 17.35], [Date.UTC(2012, 5, 10), 17.72], [Date.UTC(2012, 6, 4), 18.33], [Date.UTC(2012, 7, 10), 18.94], [Date.UTC(2012, 8, 2), 19.30], [Date.UTC(2012, 9, 5), 19.82], [Date.UTC(2012, 10, 4), 19.22], [Date.UTC(2012, 11, 2), 18.70], [Date.UTC(2013, 0, 5), 17.85], [Date.UTC(2013, 1, 8), 17.08], [Date.UTC(2013, 2, 11), 17.14], [Date.UTC(2013, 3, 7), 17.86], [Date.UTC(2013, 4, 8), 18.73], [Date.UTC(2013, 5, 9), 17.81], [Date.UTC(2013, 6, 7), 17.63], [Date.UTC(2013, 6, 12), 17.63], [Date.UTC(2013, 7, 4), 15.97], [Date.UTC(2013, 8, 11), 16.98], [Date.UTC(2013, 9, 10), 17.25], [Date.UTC(2013, 10, 9), 18.16], [Date.UTC(2013, 11, 6), 17.89], [Date.UTC(2014, 0, 1), 17.94], [Date.UTC(2014, 1, 8), 18.33], [Date.UTC(2014, 2, 3), 17.53], [Date.UTC(2014, 3, 10), 17.63], [Date.UTC(2014, 4, 7), 16.93], [Date.UTC(2014, 5, 8), 16.19], [Date.UTC(2014, 6, 6), 17.14], [Date.UTC(2014, 7, 11), 16.40], [Date.UTC(2014, 8, 1), 16.72], [Date.UTC(2014, 9, 3), 17.66], [Date.UTC(2014, 10, 8), 17.47], [Date.UTC(2014, 11, 7), 17.59], [Date.UTC(2015, 0, 6), 16.70], [Date.UTC(2015, 1, 5), 16.49], [Date.UTC(2015, 2, 7), 16.64], [Date.UTC(2015, 3, 13), 15.75], [Date.UTC(2015, 4, 13), 16.85], [Date.UTC(2015, 5, 6), 16.79], [Date.UTC(2015, 6, 12), 16.15], [Date.UTC(2015, 7, 6), 14.73], [Date.UTC(2015, 8, 5), 15.62], [Date.UTC(2015, 9, 4), 16.19], [Date.UTC(2015, 10, 7), 17.15], [Date.UTC(2015, 11, 4), 16.46], [Date.UTC(2016, 0, 2), 16.04], [Date.UTC(2016, 1, 2), 15.59], [Date.UTC(2016, 2, 3), 14.60], [Date.UTC(2016, 3, 7), 13.91], [Date.UTC(2016, 4, 6), 13.22], [Date.UTC(2016, 5, 5), 12.38], [Date.UTC(2016, 6, 4), 12.24], [Date.UTC(2016, 7, 6), 11.30], [Date.UTC(2016, 8, 8), 10.95], [Date.UTC(2016, 9, 7), 9.84], [Date.UTC(2016, 10, 5), 9.20], [Date.UTC(2016, 11, 4), 8.73], [Date.UTC(2017, 0, 7), 9.35], [Date.UTC(2017, 1, 8), 8.44], [Date.UTC(2017, 2, 7), 7.74], [Date.UTC(2017, 3, 9), 6.97], [Date.UTC(2017, 4, 6), 7.00], [Date.UTC(2017, 5, 3), 6.85], [Date.UTC(2017, 6, 7), 7.32], [Date.UTC(2017, 7, 2), 6.48], [Date.UTC(2017, 8, 6), 7.38], [Date.UTC(2017, 9, 5), 8.37], [Date.UTC(2017, 10, 12), 9.29], [Date.UTC(2017, 11, 9), 10.16], [Date.UTC(2018, 0, 3), 11.04], [Date.UTC(2018, 1, 8), 11.86], [Date.UTC(2018, 2, 7), 12.76], [Date.UTC(2018, 3, 1), 13.59], [Date.UTC(2018, 4, 6), 14.00], [Date.UTC(2018, 5, 10), 14.94], [Date.UTC(2018, 6, 7), 14.66], [Date.UTC(2018, 7, 1), 14.97], [Date.UTC(2018, 8, 3), 15.45], [Date.UTC(2018, 9, 5), 15.38], [Date.UTC(2018, 10, 8), 14.40], [Date.UTC(2018, 11, 2), 14.28], [Date.UTC(2019, 0, 4), 13.34], [Date.UTC(2019, 1, 6), 12.42], [Date.UTC(2019, 2, 2), 13.31], [Date.UTC(2019, 3, 7), 14.08], [Date.UTC(2019, 4, 4), 14.24], [Date.UTC(2019, 5, 9), 13.30], [Date.UTC(2019, 6, 6), 14.21], [Date.UTC(2019, 7, 5), 15.15], [Date.UTC(2019, 8, 9), 15.21], [Date.UTC(2019, 9, 5), 16.18], [Date.UTC(2019, 10, 3), 16.04], [Date.UTC(2019, 11, 6), 16.09], [Date.UTC(2020, 0, 5), 15.77], [Date.UTC(2020, 1, 4), 16.77], [Date.UTC(2020, 2, 4), 16.33], [Date.UTC(2020, 3, 2), 16.72], [Date.UTC(2020, 4, 2), 17.07], [Date.UTC(2020, 5, 1), 17.19], [Date.UTC(2020, 6, 4), 16.45], [Date.UTC(2020, 7, 2), 16.98], [Date.UTC(2020, 8, 6), 15.95], [Date.UTC(2020, 9, 4), 16.95], [Date.UTC(2020, 10, 3), 16.21], [Date.UTC(2020, 11, 3), 16.48], [Date.UTC(2021, 0, 2), 17.38], [Date.UTC(2021, 1, 6), 16.34], [Date.UTC(2021, 2, 4), 15.33], [Date.UTC(2021, 3, 4), 14.32], [Date.UTC(2021, 4, 2), 13.38], [Date.UTC(2021, 5, 5), 12.54], [Date.UTC(2021, 6, 4), 11.63], [Date.UTC(2021, 7, 3), 12.57], [Date.UTC(2021, 8, 11), 11.83], [Date.UTC(2021, 9, 6), 11.16], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 11.80], [Date.UTC(2022, 0, 1), 12.44], [Date.UTC(2022, 1, 2), 14.08], [Date.UTC(2022, 2, 2), 13.06], [Date.UTC(2022, 3, 5), 12.71], [Date.UTC(2022, 4, 3), 11.59], [Date.UTC(2022, 5, 4), 11.91], [Date.UTC(2022, 6, 2), 13.13], [Date.UTC(2022, 7, 2), 14.59]]}, \n","{name : 'Java',data : [[Date.UTC(2001, 5, 30), 26.49], [Date.UTC(2001, 6, 30), 25.03], [Date.UTC(2001, 7, 30), 24.66], [Date.UTC(2001, 8, 28), 24.82], [Date.UTC(2001, 9, 26), 25.68], [Date.UTC(2001, 10, 28), 24.37], [Date.UTC(2001, 11, 31), 24.20], [Date.UTC(2002, 0, 30), 24.06], [Date.UTC(2002, 1, 27), 24.01], [Date.UTC(2002, 2, 29), 24.41], [Date.UTC(2002, 3, 29), 25.05], [Date.UTC(2002, 4, 29), 25.19], [Date.UTC(2002, 5, 29), 24.20], [Date.UTC(2002, 6, 31), 24.53], [Date.UTC(2002, 7, 29), 22.89], [Date.UTC(2002, 8, 29), 24.48], [Date.UTC(2002, 9, 30), 24.20], [Date.UTC(2002, 10, 29), 24.12], [Date.UTC(2002, 11, 31), 24.23], [Date.UTC(2003, 0, 31), 24.79], [Date.UTC(2003, 1, 28), 24.78], [Date.UTC(2003, 2, 31), 24.60], [Date.UTC(2003, 3, 30), 24.66], [Date.UTC(2003, 4, 30), 23.11], [Date.UTC(2003, 5, 30), 22.34], [Date.UTC(2003, 6, 31), 23.21], [Date.UTC(2003, 7, 31), 22.24], [Date.UTC(2003, 8, 30), 21.90], [Date.UTC(2003, 9, 31), 23.08], [Date.UTC(2003, 10, 30), 25.01], [Date.UTC(2003, 11, 31), 23.57], [Date.UTC(2004, 0, 31), 22.56], [Date.UTC(2004, 1, 29), 23.17], [Date.UTC(2004, 2, 31), 24.24], [Date.UTC(2004, 3, 30), 18.69], [Date.UTC(2004, 4, 30), 17.54], [Date.UTC(2004, 5, 30), 17.05], [Date.UTC(2004, 6, 31), 17.00], [Date.UTC(2004, 7, 30), 15.90], [Date.UTC(2004, 8, 30), 17.05], [Date.UTC(2004, 9, 31), 14.80], [Date.UTC(2004, 10, 30), 16.33], [Date.UTC(2004, 11, 31), 17.48], [Date.UTC(2005, 0, 31), 18.34], [Date.UTC(2005, 1, 28), 18.87], [Date.UTC(2005, 2, 31), 16.98], [Date.UTC(2005, 3, 30), 17.40], [Date.UTC(2005, 4, 31), 18.57], [Date.UTC(2005, 5, 30), 19.66], [Date.UTC(2005, 6, 31), 21.21], [Date.UTC(2005, 7, 31), 22.44], [Date.UTC(2005, 8, 30), 21.87], [Date.UTC(2005, 11, 3), 22.13], [Date.UTC(2006, 0, 4), 22.25], [Date.UTC(2006, 1, 2), 22.43], [Date.UTC(2006, 2, 1), 21.89], [Date.UTC(2006, 3, 2), 21.28], [Date.UTC(2006, 4, 1), 21.32], [Date.UTC(2006, 5, 1), 21.13], [Date.UTC(2006, 6, 2), 21.85], [Date.UTC(2006, 7, 2), 22.38], [Date.UTC(2006, 8, 2), 21.53], [Date.UTC(2006, 9, 1), 21.17], [Date.UTC(2006, 10, 2), 20.40], [Date.UTC(2006, 11, 1), 19.91], [Date.UTC(2007, 0, 2), 19.16], [Date.UTC(2007, 1, 3), 18.98], [Date.UTC(2007, 2, 3), 18.04], [Date.UTC(2007, 3, 1), 18.36], [Date.UTC(2007, 4, 5), 19.14], [Date.UTC(2007, 5, 2), 20.03], [Date.UTC(2007, 6, 2), 21.01], [Date.UTC(2007, 7, 5), 21.77], [Date.UTC(2007, 8, 2), 21.70], [Date.UTC(2007, 9, 4), 21.62], [Date.UTC(2007, 10, 4), 20.54], [Date.UTC(2007, 11, 3), 20.05], [Date.UTC(2008, 0, 3), 20.85], [Date.UTC(2008, 1, 7), 21.48], [Date.UTC(2008, 5, 1), 20.89], [Date.UTC(2008, 6, 2), 21.34], [Date.UTC(2008, 7, 3), 21.57], [Date.UTC(2008, 8, 3), 20.71], [Date.UTC(2008, 9, 6), 20.95], [Date.UTC(2008, 10, 2), 20.30], [Date.UTC(2008, 11, 3), 17.92], [Date.UTC(2009, 0, 2), 19.02], [Date.UTC(2009, 1, 1), 19.40], [Date.UTC(2009, 2, 5), 19.80], [Date.UTC(2009, 3, 7), 19.34], [Date.UTC(2009, 4, 1), 19.54], [Date.UTC(2009, 5, 4), 20.15], [Date.UTC(2009, 6, 2), 20.45], [Date.UTC(2009, 7, 1), 19.53], [Date.UTC(2009, 8, 5), 19.38], [Date.UTC(2009, 9, 2), 18.65], [Date.UTC(2009, 10, 2), 18.37], [Date.UTC(2009, 11, 2), 17.06], [Date.UTC(2010, 0, 5), 17.48], [Date.UTC(2010, 1, 7), 17.35], [Date.UTC(2010, 2, 7), 17.51], [Date.UTC(2010, 3, 5), 18.05], [Date.UTC(2010, 4, 15), 17.96], [Date.UTC(2010, 6, 6), 18.67], [Date.UTC(2010, 6, 30), 17.99], [Date.UTC(2010, 8, 11), 17.92], [Date.UTC(2010, 9, 2), 18.17], [Date.UTC(2010, 10, 3), 18.51], [Date.UTC(2010, 11, 7), 18.00], [Date.UTC(2011, 0, 2), 17.77], [Date.UTC(2011, 1, 8), 18.48], [Date.UTC(2011, 2, 8), 19.71], [Date.UTC(2011, 3, 3), 19.04], [Date.UTC(2011, 4, 2), 18.16], [Date.UTC(2011, 5, 5), 18.58], [Date.UTC(2011, 5, 27), 18.58], [Date.UTC(2011, 6, 8), 19.25], [Date.UTC(2011, 7, 3), 19.41], [Date.UTC(2011, 8, 10), 18.76], [Date.UTC(2011, 9, 9), 17.91], [Date.UTC(2011, 10, 7), 17.87], [Date.UTC(2011, 11, 4), 17.56], [Date.UTC(2012, 0, 8), 17.47], [Date.UTC(2012, 1, 5), 17.05], [Date.UTC(2012, 2, 11), 17.11], [Date.UTC(2012, 3, 8), 17.03], [Date.UTC(2012, 4, 9), 16.60], [Date.UTC(2012, 5, 10), 16.26], [Date.UTC(2012, 6, 4), 16.09], [Date.UTC(2012, 7, 10), 16.35], [Date.UTC(2012, 8, 2), 16.27], [Date.UTC(2012, 9, 5), 17.19], [Date.UTC(2012, 10, 4), 17.46], [Date.UTC(2012, 11, 2), 17.57], [Date.UTC(2013, 0, 5), 17.42], [Date.UTC(2013, 1, 8), 18.39], [Date.UTC(2013, 2, 11), 18.16], [Date.UTC(2013, 3, 7), 17.68], [Date.UTC(2013, 4, 8), 16.91], [Date.UTC(2013, 5, 9), 16.66], [Date.UTC(2013, 6, 7), 15.91], [Date.UTC(2013, 6, 12), 15.91], [Date.UTC(2013, 7, 4), 15.98], [Date.UTC(2013, 8, 11), 16.15], [Date.UTC(2013, 9, 10), 16.11], [Date.UTC(2013, 10, 9), 16.52], [Date.UTC(2013, 11, 6), 17.31], [Date.UTC(2014, 0, 1), 16.52], [Date.UTC(2014, 1, 8), 17.32], [Date.UTC(2014, 2, 3), 16.41], [Date.UTC(2014, 3, 10), 17.35], [Date.UTC(2014, 4, 7), 16.91], [Date.UTC(2014, 5, 8), 16.11], [Date.UTC(2014, 6, 6), 15.69], [Date.UTC(2014, 7, 11), 14.98], [Date.UTC(2014, 8, 1), 14.14], [Date.UTC(2014, 9, 3), 13.51], [Date.UTC(2014, 10, 8), 14.39], [Date.UTC(2014, 11, 7), 14.96], [Date.UTC(2015, 0, 6), 15.53], [Date.UTC(2015, 1, 5), 15.34], [Date.UTC(2015, 2, 7), 15.58], [Date.UTC(2015, 3, 13), 16.04], [Date.UTC(2015, 4, 13), 16.87], [Date.UTC(2015, 5, 6), 17.82], [Date.UTC(2015, 6, 12), 17.73], [Date.UTC(2015, 7, 6), 19.27], [Date.UTC(2015, 8, 5), 19.56], [Date.UTC(2015, 9, 4), 19.54], [Date.UTC(2015, 10, 7), 20.40], [Date.UTC(2015, 11, 4), 20.97], [Date.UTC(2016, 0, 2), 21.47], [Date.UTC(2016, 1, 2), 21.14], [Date.UTC(2016, 2, 3), 20.53], [Date.UTC(2016, 3, 7), 20.85], [Date.UTC(2016, 4, 6), 20.96], [Date.UTC(2016, 5, 5), 20.79], [Date.UTC(2016, 6, 4), 19.80], [Date.UTC(2016, 7, 6), 19.01], [Date.UTC(2016, 8, 8), 18.24], [Date.UTC(2016, 9, 7), 18.80], [Date.UTC(2016, 10, 5), 18.75], [Date.UTC(2016, 11, 4), 17.86], [Date.UTC(2017, 0, 7), 17.28], [Date.UTC(2017, 1, 8), 16.68], [Date.UTC(2017, 2, 7), 16.38], [Date.UTC(2017, 3, 9), 15.57], [Date.UTC(2017, 4, 6), 14.64], [Date.UTC(2017, 5, 3), 14.49], [Date.UTC(2017, 6, 7), 13.77], [Date.UTC(2017, 7, 2), 12.96], [Date.UTC(2017, 8, 6), 12.69], [Date.UTC(2017, 9, 5), 12.43], [Date.UTC(2017, 10, 12), 13.23], [Date.UTC(2017, 11, 9), 13.27], [Date.UTC(2018, 0, 3), 14.22], [Date.UTC(2018, 1, 8), 14.99], [Date.UTC(2018, 2, 7), 14.94], [Date.UTC(2018, 3, 1), 15.78], [Date.UTC(2018, 4, 6), 16.38], [Date.UTC(2018, 5, 10), 15.37], [Date.UTC(2018, 6, 7), 16.14], [Date.UTC(2018, 7, 1), 16.88], [Date.UTC(2018, 8, 3), 17.44], [Date.UTC(2018, 9, 5), 17.80], [Date.UTC(2018, 10, 8), 16.75], [Date.UTC(2018, 11, 2), 15.93], [Date.UTC(2019, 0, 4), 16.90], [Date.UTC(2019, 1, 6), 15.88], [Date.UTC(2019, 2, 2), 14.88], [Date.UTC(2019, 3, 7), 15.04], [Date.UTC(2019, 4, 4), 16.00], [Date.UTC(2019, 5, 9), 15.00], [Date.UTC(2019, 6, 6), 15.06], [Date.UTC(2019, 7, 5), 16.03], [Date.UTC(2019, 8, 9), 16.66], [Date.UTC(2019, 9, 5), 16.88], [Date.UTC(2019, 10, 3), 16.25], [Date.UTC(2019, 11, 6), 17.25], [Date.UTC(2020, 0, 5), 16.90], [Date.UTC(2020, 1, 4), 17.36], [Date.UTC(2020, 2, 4), 17.78], [Date.UTC(2020, 3, 2), 16.73], [Date.UTC(2020, 4, 2), 16.28], [Date.UTC(2020, 5, 1), 16.10], [Date.UTC(2020, 6, 4), 15.10], [Date.UTC(2020, 7, 2), 14.43], [Date.UTC(2020, 8, 6), 13.48], [Date.UTC(2020, 9, 4), 12.56], [Date.UTC(2020, 10, 3), 11.68], [Date.UTC(2020, 11, 3), 12.53], [Date.UTC(2021, 0, 2), 11.96], [Date.UTC(2021, 1, 6), 11.29], [Date.UTC(2021, 2, 4), 10.45], [Date.UTC(2021, 3, 4), 11.23], [Date.UTC(2021, 4, 2), 11.74], [Date.UTC(2021, 5, 5), 11.54], [Date.UTC(2021, 6, 4), 11.20], [Date.UTC(2021, 7, 3), 10.43], [Date.UTC(2021, 8, 11), 11.12], [Date.UTC(2021, 9, 6), 10.46], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 10.12], [Date.UTC(2022, 0, 1), 10.66], [Date.UTC(2022, 1, 2), 12.13], [Date.UTC(2022, 2, 2), 11.19], [Date.UTC(2022, 3, 5), 10.82], [Date.UTC(2022, 4, 3), 10.99], [Date.UTC(2022, 5, 4), 10.47], [Date.UTC(2022, 6, 2), 11.59], [Date.UTC(2022, 7, 2), 12.40]]}, \n","{name : 'C++',data : [[Date.UTC(2001, 5, 30), 14.20], [Date.UTC(2001, 6, 30), 16.11], [Date.UTC(2001, 7, 30), 16.12], [Date.UTC(2001, 8, 28), 15.85], [Date.UTC(2001, 9, 26), 16.10], [Date.UTC(2001, 10, 28), 15.67], [Date.UTC(2001, 11, 31), 14.96], [Date.UTC(2002, 0, 30), 15.18], [Date.UTC(2002, 1, 27), 15.54], [Date.UTC(2002, 2, 29), 15.91], [Date.UTC(2002, 3, 29), 15.37], [Date.UTC(2002, 4, 29), 14.86], [Date.UTC(2002, 5, 29), 14.18], [Date.UTC(2002, 6, 31), 14.94], [Date.UTC(2002, 7, 29), 14.77], [Date.UTC(2002, 8, 29), 15.90], [Date.UTC(2002, 9, 30), 15.03], [Date.UTC(2002, 10, 29), 13.64], [Date.UTC(2002, 11, 31), 13.19], [Date.UTC(2003, 0, 31), 14.63], [Date.UTC(2003, 1, 28), 15.53], [Date.UTC(2003, 2, 31), 14.57], [Date.UTC(2003, 3, 30), 15.80], [Date.UTC(2003, 4, 30), 15.58], [Date.UTC(2003, 5, 30), 16.72], [Date.UTC(2003, 6, 31), 16.58], [Date.UTC(2003, 7, 31), 17.53], [Date.UTC(2003, 8, 30), 16.17], [Date.UTC(2003, 9, 31), 16.31], [Date.UTC(2003, 10, 30), 17.42], [Date.UTC(2003, 11, 31), 16.08], [Date.UTC(2004, 0, 31), 15.71], [Date.UTC(2004, 1, 29), 14.50], [Date.UTC(2004, 2, 31), 15.99], [Date.UTC(2004, 3, 30), 12.27], [Date.UTC(2004, 4, 30), 12.55], [Date.UTC(2004, 5, 30), 13.44], [Date.UTC(2004, 6, 31), 15.31], [Date.UTC(2004, 7, 30), 14.92], [Date.UTC(2004, 8, 30), 15.02], [Date.UTC(2004, 9, 31), 13.86], [Date.UTC(2004, 10, 30), 11.91], [Date.UTC(2004, 11, 31), 11.93], [Date.UTC(2005, 0, 31), 11.34], [Date.UTC(2005, 1, 28), 11.63], [Date.UTC(2005, 2, 31), 10.19], [Date.UTC(2005, 3, 30), 9.90], [Date.UTC(2005, 4, 31), 9.72], [Date.UTC(2005, 5, 30), 11.06], [Date.UTC(2005, 6, 31), 10.51], [Date.UTC(2005, 7, 31), 11.17], [Date.UTC(2005, 8, 30), 11.82], [Date.UTC(2005, 11, 3), 11.03], [Date.UTC(2006, 0, 4), 11.46], [Date.UTC(2006, 1, 2), 11.30], [Date.UTC(2006, 2, 1), 11.16], [Date.UTC(2006, 3, 2), 10.90], [Date.UTC(2006, 4, 1), 10.94], [Date.UTC(2006, 5, 1), 10.67], [Date.UTC(2006, 6, 2), 9.78], [Date.UTC(2006, 7, 2), 10.25], [Date.UTC(2006, 8, 2), 10.75], [Date.UTC(2006, 9, 1), 11.06], [Date.UTC(2006, 10, 2), 11.05], [Date.UTC(2006, 11, 1), 10.41], [Date.UTC(2007, 0, 2), 10.42], [Date.UTC(2007, 1, 3), 10.77], [Date.UTC(2007, 2, 3), 11.11], [Date.UTC(2007, 3, 1), 10.72], [Date.UTC(2007, 4, 5), 10.11], [Date.UTC(2007, 5, 2), 11.12], [Date.UTC(2007, 6, 2), 10.50], [Date.UTC(2007, 7, 5), 10.11], [Date.UTC(2007, 8, 2), 9.94], [Date.UTC(2007, 9, 4), 9.58], [Date.UTC(2007, 10, 4), 8.75], [Date.UTC(2007, 11, 3), 7.87], [Date.UTC(2008, 0, 3), 8.73], [Date.UTC(2008, 1, 7), 9.27], [Date.UTC(2008, 5, 1), 10.81], [Date.UTC(2008, 6, 2), 10.69], [Date.UTC(2008, 7, 3), 10.06], [Date.UTC(2008, 8, 3), 10.72], [Date.UTC(2008, 9, 6), 10.95], [Date.UTC(2008, 10, 2), 10.36], [Date.UTC(2008, 11, 3), 10.10], [Date.UTC(2009, 0, 2), 10.12], [Date.UTC(2009, 1, 1), 9.63], [Date.UTC(2009, 2, 5), 10.36], [Date.UTC(2009, 3, 7), 10.74], [Date.UTC(2009, 4, 1), 11.07], [Date.UTC(2009, 5, 4), 10.59], [Date.UTC(2009, 6, 2), 10.42], [Date.UTC(2009, 7, 1), 10.50], [Date.UTC(2009, 8, 5), 9.99], [Date.UTC(2009, 9, 2), 9.88], [Date.UTC(2009, 10, 2), 10.00], [Date.UTC(2009, 11, 2), 9.18], [Date.UTC(2010, 0, 5), 9.71], [Date.UTC(2010, 1, 7), 9.45], [Date.UTC(2010, 2, 7), 9.61], [Date.UTC(2010, 3, 5), 9.71], [Date.UTC(2010, 4, 15), 10.38], [Date.UTC(2010, 6, 6), 10.47], [Date.UTC(2010, 6, 30), 9.66], [Date.UTC(2010, 8, 11), 9.81], [Date.UTC(2010, 9, 2), 9.80], [Date.UTC(2010, 10, 3), 9.50], [Date.UTC(2010, 11, 7), 9.01], [Date.UTC(2011, 0, 2), 8.78], [Date.UTC(2011, 1, 8), 8.19], [Date.UTC(2011, 2, 8), 8.75], [Date.UTC(2011, 3, 3), 9.23], [Date.UTC(2011, 4, 2), 9.15], [Date.UTC(2011, 5, 5), 9.83], [Date.UTC(2011, 5, 27), 9.83], [Date.UTC(2011, 6, 8), 9.02], [Date.UTC(2011, 7, 3), 8.43], [Date.UTC(2011, 8, 10), 8.85], [Date.UTC(2011, 9, 9), 9.07], [Date.UTC(2011, 10, 7), 8.08], [Date.UTC(2011, 11, 4), 8.25], [Date.UTC(2012, 0, 8), 8.05], [Date.UTC(2012, 1, 5), 7.85], [Date.UTC(2012, 2, 11), 8.05], [Date.UTC(2012, 3, 8), 8.90], [Date.UTC(2012, 4, 9), 9.82], [Date.UTC(2012, 5, 10), 9.36], [Date.UTC(2012, 6, 4), 9.12], [Date.UTC(2012, 7, 10), 9.33], [Date.UTC(2012, 8, 2), 9.15], [Date.UTC(2012, 9, 5), 9.26], [Date.UTC(2012, 10, 4), 9.70], [Date.UTC(2012, 11, 2), 9.20], [Date.UTC(2013, 0, 5), 9.14], [Date.UTC(2013, 1, 8), 8.76], [Date.UTC(2013, 2, 11), 9.11], [Date.UTC(2013, 3, 7), 9.71], [Date.UTC(2013, 4, 8), 9.20], [Date.UTC(2013, 5, 9), 8.82], [Date.UTC(2013, 6, 7), 8.75], [Date.UTC(2013, 6, 12), 8.75], [Date.UTC(2013, 7, 4), 9.37], [Date.UTC(2013, 8, 11), 8.66], [Date.UTC(2013, 9, 10), 8.66], [Date.UTC(2013, 10, 9), 8.37], [Date.UTC(2013, 11, 6), 8.27], [Date.UTC(2014, 0, 1), 7.56], [Date.UTC(2014, 1, 8), 6.89], [Date.UTC(2014, 2, 3), 6.31], [Date.UTC(2014, 3, 10), 6.14], [Date.UTC(2014, 4, 7), 5.99], [Date.UTC(2014, 5, 8), 6.43], [Date.UTC(2014, 6, 6), 5.52], [Date.UTC(2014, 7, 11), 4.70], [Date.UTC(2014, 8, 1), 4.67], [Date.UTC(2014, 9, 3), 4.87], [Date.UTC(2014, 10, 8), 6.10], [Date.UTC(2014, 11, 7), 6.10], [Date.UTC(2015, 0, 6), 6.70], [Date.UTC(2015, 1, 5), 6.61], [Date.UTC(2015, 2, 7), 6.64], [Date.UTC(2015, 3, 13), 6.96], [Date.UTC(2015, 4, 13), 7.87], [Date.UTC(2015, 5, 6), 7.76], [Date.UTC(2015, 6, 12), 8.64], [Date.UTC(2015, 7, 6), 7.74], [Date.UTC(2015, 8, 5), 6.78], [Date.UTC(2015, 9, 4), 5.75], [Date.UTC(2015, 10, 7), 6.20], [Date.UTC(2015, 11, 4), 5.94], [Date.UTC(2016, 0, 2), 6.91], [Date.UTC(2016, 1, 2), 6.91], [Date.UTC(2016, 2, 3), 6.72], [Date.UTC(2016, 3, 7), 5.92], [Date.UTC(2016, 4, 6), 6.70], [Date.UTC(2016, 5, 5), 6.20], [Date.UTC(2016, 6, 4), 6.31], [Date.UTC(2016, 7, 6), 5.80], [Date.UTC(2016, 8, 8), 6.66], [Date.UTC(2016, 9, 7), 5.80], [Date.UTC(2016, 10, 5), 5.41], [Date.UTC(2016, 11, 4), 5.34], [Date.UTC(2017, 0, 7), 6.30], [Date.UTC(2017, 1, 8), 5.43], [Date.UTC(2017, 2, 7), 5.18], [Date.UTC(2017, 3, 9), 4.55], [Date.UTC(2017, 4, 6), 4.75], [Date.UTC(2017, 5, 3), 5.72], [Date.UTC(2017, 6, 7), 5.58], [Date.UTC(2017, 7, 2), 5.55], [Date.UTC(2017, 8, 6), 5.56], [Date.UTC(2017, 9, 5), 5.01], [Date.UTC(2017, 10, 12), 5.34], [Date.UTC(2017, 11, 9), 4.72], [Date.UTC(2018, 0, 3), 5.60], [Date.UTC(2018, 1, 8), 5.73], [Date.UTC(2018, 2, 7), 6.45], [Date.UTC(2018, 3, 1), 7.22], [Date.UTC(2018, 4, 6), 7.67], [Date.UTC(2018, 5, 10), 8.34], [Date.UTC(2018, 6, 7), 7.62], [Date.UTC(2018, 7, 1), 7.47], [Date.UTC(2018, 8, 3), 7.39], [Date.UTC(2018, 9, 5), 7.59], [Date.UTC(2018, 10, 8), 8.28], [Date.UTC(2018, 11, 2), 7.56], [Date.UTC(2019, 0, 4), 8.16], [Date.UTC(2019, 1, 6), 7.44], [Date.UTC(2019, 2, 2), 8.13], [Date.UTC(2019, 3, 7), 8.84], [Date.UTC(2019, 4, 4), 8.10], [Date.UTC(2019, 5, 9), 7.38], [Date.UTC(2019, 6, 6), 6.70], [Date.UTC(2019, 7, 5), 6.06], [Date.UTC(2019, 8, 9), 5.64], [Date.UTC(2019, 9, 5), 6.23], [Date.UTC(2019, 10, 3), 5.60], [Date.UTC(2019, 11, 6), 6.20], [Date.UTC(2020, 0, 5), 5.57], [Date.UTC(2020, 1, 4), 6.16], [Date.UTC(2020, 2, 4), 6.79], [Date.UTC(2020, 3, 2), 6.78], [Date.UTC(2020, 4, 2), 6.13], [Date.UTC(2020, 5, 1), 5.95], [Date.UTC(2020, 6, 4), 6.21], [Date.UTC(2020, 7, 2), 6.84], [Date.UTC(2020, 8, 6), 7.11], [Date.UTC(2020, 9, 4), 6.94], [Date.UTC(2020, 10, 3), 7.60], [Date.UTC(2020, 11, 3), 6.91], [Date.UTC(2021, 0, 2), 7.56], [Date.UTC(2021, 1, 6), 6.88], [Date.UTC(2021, 2, 4), 6.52], [Date.UTC(2021, 3, 4), 7.14], [Date.UTC(2021, 4, 2), 7.81], [Date.UTC(2021, 5, 5), 7.36], [Date.UTC(2021, 6, 4), 8.02], [Date.UTC(2021, 7, 3), 7.36], [Date.UTC(2021, 8, 11), 7.13], [Date.UTC(2021, 9, 6), 7.50], [Date.UTC(2021, 10, 6), 8.28], [Date.UTC(2021, 11, 5), 7.73], [Date.UTC(2022, 0, 1), 8.29], [Date.UTC(2022, 1, 2), 8.01], [Date.UTC(2022, 2, 2), 8.66], [Date.UTC(2022, 3, 5), 8.28], [Date.UTC(2022, 4, 3), 8.83], [Date.UTC(2022, 5, 4), 9.63], [Date.UTC(2022, 6, 2), 10.00], [Date.UTC(2022, 7, 2), 10.17]]}, \n","{name : 'C#',data : [[Date.UTC(2001, 5, 30), 0.38], [Date.UTC(2001, 6, 30), 0.43], [Date.UTC(2001, 7, 30), 0.38], [Date.UTC(2001, 8, 28), 0.39], [Date.UTC(2001, 9, 26), 0.42], [Date.UTC(2001, 10, 28), 0.76], [Date.UTC(2001, 11, 31), 0.59], [Date.UTC(2002, 0, 30), 0.62], [Date.UTC(2002, 1, 27), 0.74], [Date.UTC(2002, 2, 29), 0.74], [Date.UTC(2002, 3, 29), 1.18], [Date.UTC(2002, 4, 29), 1.16], [Date.UTC(2002, 5, 29), 1.46], [Date.UTC(2002, 6, 31), 1.36], [Date.UTC(2002, 7, 29), 1.46], [Date.UTC(2002, 8, 29), 1.65], [Date.UTC(2002, 9, 30), 1.78], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.45], [Date.UTC(2003, 0, 31), 1.99], [Date.UTC(2003, 1, 28), 1.98], [Date.UTC(2003, 2, 31), 2.38], [Date.UTC(2003, 3, 30), 1.88], [Date.UTC(2003, 4, 30), 1.94], [Date.UTC(2003, 5, 30), 1.78], [Date.UTC(2003, 6, 31), 2.00], [Date.UTC(2003, 7, 31), 2.06], [Date.UTC(2003, 8, 30), 1.94], [Date.UTC(2003, 9, 31), 1.90], [Date.UTC(2003, 10, 30), 1.71], [Date.UTC(2003, 11, 31), 1.80], [Date.UTC(2004, 0, 31), 2.18], [Date.UTC(2004, 1, 29), 2.24], [Date.UTC(2004, 2, 31), 2.14], [Date.UTC(2004, 3, 30), 1.88], [Date.UTC(2004, 4, 30), 1.65], [Date.UTC(2004, 5, 30), 1.67], [Date.UTC(2004, 6, 31), 1.63], [Date.UTC(2004, 7, 30), 1.63], [Date.UTC(2004, 8, 30), 1.64], [Date.UTC(2004, 9, 31), 1.50], [Date.UTC(2004, 10, 30), 1.95], [Date.UTC(2004, 11, 31), 2.20], [Date.UTC(2005, 0, 31), 2.36], [Date.UTC(2005, 1, 28), 2.53], [Date.UTC(2005, 2, 31), 2.82], [Date.UTC(2005, 3, 30), 2.77], [Date.UTC(2005, 4, 31), 2.78], [Date.UTC(2005, 5, 30), 3.14], [Date.UTC(2005, 6, 31), 3.48], [Date.UTC(2005, 7, 31), 3.29], [Date.UTC(2005, 8, 30), 3.46], [Date.UTC(2005, 11, 3), 3.31], [Date.UTC(2006, 0, 4), 3.55], [Date.UTC(2006, 1, 2), 3.97], [Date.UTC(2006, 2, 1), 3.15], [Date.UTC(2006, 3, 2), 3.95], [Date.UTC(2006, 4, 1), 3.27], [Date.UTC(2006, 5, 1), 3.24], [Date.UTC(2006, 6, 2), 3.40], [Date.UTC(2006, 7, 2), 2.68], [Date.UTC(2006, 8, 2), 2.99], [Date.UTC(2006, 9, 1), 3.06], [Date.UTC(2006, 10, 2), 3.02], [Date.UTC(2006, 11, 1), 3.17], [Date.UTC(2007, 0, 2), 3.52], [Date.UTC(2007, 1, 3), 3.19], [Date.UTC(2007, 2, 3), 3.37], [Date.UTC(2007, 3, 1), 3.55], [Date.UTC(2007, 4, 5), 3.66], [Date.UTC(2007, 5, 2), 3.48], [Date.UTC(2007, 6, 2), 3.71], [Date.UTC(2007, 7, 5), 3.99], [Date.UTC(2007, 8, 2), 3.58], [Date.UTC(2007, 9, 4), 3.74], [Date.UTC(2007, 10, 4), 3.92], [Date.UTC(2007, 11, 3), 3.99], [Date.UTC(2008, 0, 3), 4.86], [Date.UTC(2008, 1, 7), 4.51], [Date.UTC(2008, 5, 1), 4.06], [Date.UTC(2008, 6, 2), 4.00], [Date.UTC(2008, 7, 3), 3.70], [Date.UTC(2008, 8, 3), 4.33], [Date.UTC(2008, 9, 6), 3.77], [Date.UTC(2008, 10, 2), 4.03], [Date.UTC(2008, 11, 3), 4.58], [Date.UTC(2009, 0, 2), 5.61], [Date.UTC(2009, 1, 1), 5.06], [Date.UTC(2009, 2, 5), 4.32], [Date.UTC(2009, 3, 7), 4.06], [Date.UTC(2009, 4, 1), 4.27], [Date.UTC(2009, 5, 4), 4.54], [Date.UTC(2009, 6, 2), 4.54], [Date.UTC(2009, 7, 1), 4.44], [Date.UTC(2009, 8, 5), 4.19], [Date.UTC(2009, 9, 2), 4.42], [Date.UTC(2009, 10, 2), 5.35], [Date.UTC(2009, 11, 2), 6.26], [Date.UTC(2010, 0, 5), 5.77], [Date.UTC(2010, 1, 7), 5.01], [Date.UTC(2010, 2, 7), 4.26], [Date.UTC(2010, 3, 5), 4.43], [Date.UTC(2010, 4, 15), 4.78], [Date.UTC(2010, 6, 6), 5.73], [Date.UTC(2010, 6, 30), 4.99], [Date.UTC(2010, 8, 11), 5.02], [Date.UTC(2010, 9, 2), 4.96], [Date.UTC(2010, 10, 3), 5.71], [Date.UTC(2010, 11, 7), 6.69], [Date.UTC(2011, 0, 2), 6.23], [Date.UTC(2011, 1, 8), 6.81], [Date.UTC(2011, 2, 8), 7.21], [Date.UTC(2011, 3, 3), 7.19], [Date.UTC(2011, 4, 2), 7.54], [Date.UTC(2011, 5, 5), 6.84], [Date.UTC(2011, 5, 27), 6.84], [Date.UTC(2011, 6, 8), 6.22], [Date.UTC(2011, 7, 3), 6.04], [Date.UTC(2011, 8, 10), 6.82], [Date.UTC(2011, 9, 9), 6.72], [Date.UTC(2011, 10, 7), 7.32], [Date.UTC(2011, 11, 4), 8.21], [Date.UTC(2012, 0, 8), 8.76], [Date.UTC(2012, 1, 5), 8.65], [Date.UTC(2012, 2, 11), 8.24], [Date.UTC(2012, 3, 8), 7.35], [Date.UTC(2012, 4, 9), 6.82], [Date.UTC(2012, 5, 10), 7.03], [Date.UTC(2012, 6, 4), 6.67], [Date.UTC(2012, 7, 10), 6.59], [Date.UTC(2012, 8, 2), 6.60], [Date.UTC(2012, 9, 5), 6.53], [Date.UTC(2012, 10, 4), 5.59], [Date.UTC(2012, 11, 2), 5.55], [Date.UTC(2013, 0, 5), 6.20], [Date.UTC(2013, 1, 8), 6.68], [Date.UTC(2013, 2, 11), 6.60], [Date.UTC(2013, 3, 7), 6.15], [Date.UTC(2013, 4, 8), 6.12], [Date.UTC(2013, 5, 9), 5.78], [Date.UTC(2013, 6, 7), 6.21], [Date.UTC(2013, 6, 12), 6.21], [Date.UTC(2013, 7, 4), 6.12], [Date.UTC(2013, 8, 11), 5.56], [Date.UTC(2013, 9, 10), 5.72], [Date.UTC(2013, 10, 9), 6.02], [Date.UTC(2013, 11, 6), 5.62], [Date.UTC(2014, 0, 1), 5.85], [Date.UTC(2014, 1, 8), 6.45], [Date.UTC(2014, 2, 3), 5.57], [Date.UTC(2014, 3, 10), 4.82], [Date.UTC(2014, 4, 7), 3.75], [Date.UTC(2014, 5, 8), 3.94], [Date.UTC(2014, 6, 6), 4.05], [Date.UTC(2014, 7, 11), 3.41], [Date.UTC(2014, 8, 1), 4.35], [Date.UTC(2014, 9, 3), 4.75], [Date.UTC(2014, 10, 8), 4.98], [Date.UTC(2014, 11, 7), 4.33], [Date.UTC(2015, 0, 6), 5.05], [Date.UTC(2015, 1, 5), 5.74], [Date.UTC(2015, 2, 7), 4.92], [Date.UTC(2015, 3, 13), 4.95], [Date.UTC(2015, 4, 13), 5.26], [Date.UTC(2015, 5, 6), 5.06], [Date.UTC(2015, 6, 12), 5.65], [Date.UTC(2015, 7, 6), 4.84], [Date.UTC(2015, 8, 5), 4.91], [Date.UTC(2015, 9, 4), 4.82], [Date.UTC(2015, 10, 7), 4.32], [Date.UTC(2015, 11, 4), 4.11], [Date.UTC(2016, 0, 2), 4.71], [Date.UTC(2016, 1, 2), 4.40], [Date.UTC(2016, 2, 3), 4.27], [Date.UTC(2016, 3, 7), 3.80], [Date.UTC(2016, 4, 6), 4.48], [Date.UTC(2016, 5, 5), 3.79], [Date.UTC(2016, 6, 4), 3.92], [Date.UTC(2016, 7, 6), 4.91], [Date.UTC(2016, 8, 8), 5.49], [Date.UTC(2016, 9, 7), 4.37], [Date.UTC(2016, 10, 5), 3.66], [Date.UTC(2016, 11, 4), 3.17], [Date.UTC(2017, 0, 7), 4.04], [Date.UTC(2017, 1, 8), 4.90], [Date.UTC(2017, 2, 7), 4.41], [Date.UTC(2017, 3, 9), 3.58], [Date.UTC(2017, 4, 6), 3.46], [Date.UTC(2017, 5, 3), 3.53], [Date.UTC(2017, 6, 7), 3.52], [Date.UTC(2017, 7, 2), 4.20], [Date.UTC(2017, 8, 6), 4.78], [Date.UTC(2017, 9, 5), 3.86], [Date.UTC(2017, 10, 12), 3.01], [Date.UTC(2017, 11, 9), 2.82], [Date.UTC(2018, 0, 3), 3.75], [Date.UTC(2018, 1, 8), 4.45], [Date.UTC(2018, 2, 7), 5.07], [Date.UTC(2018, 3, 1), 5.27], [Date.UTC(2018, 4, 6), 4.40], [Date.UTC(2018, 5, 10), 4.31], [Date.UTC(2018, 6, 7), 3.79], [Date.UTC(2018, 7, 1), 3.54], [Date.UTC(2018, 8, 3), 3.30], [Date.UTC(2018, 9, 5), 3.49], [Date.UTC(2018, 10, 8), 3.95], [Date.UTC(2018, 11, 2), 3.45], [Date.UTC(2019, 0, 4), 3.28], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 3.27], [Date.UTC(2019, 3, 7), 3.52], [Date.UTC(2019, 4, 4), 3.98], [Date.UTC(2019, 5, 9), 4.48], [Date.UTC(2019, 6, 6), 4.36], [Date.UTC(2019, 7, 5), 3.84], [Date.UTC(2019, 8, 9), 3.40], [Date.UTC(2019, 9, 5), 3.86], [Date.UTC(2019, 10, 3), 4.32], [Date.UTC(2019, 11, 6), 4.80], [Date.UTC(2020, 0, 5), 5.35], [Date.UTC(2020, 1, 4), 5.93], [Date.UTC(2020, 2, 4), 5.32], [Date.UTC(2020, 3, 2), 4.74], [Date.UTC(2020, 4, 2), 4.29], [Date.UTC(2020, 5, 1), 4.73], [Date.UTC(2020, 6, 4), 5.25], [Date.UTC(2020, 7, 2), 4.68], [Date.UTC(2020, 8, 6), 4.58], [Date.UTC(2020, 9, 4), 4.16], [Date.UTC(2020, 10, 3), 4.67], [Date.UTC(2020, 11, 3), 4.20], [Date.UTC(2021, 0, 2), 3.95], [Date.UTC(2021, 1, 6), 4.44], [Date.UTC(2021, 2, 4), 4.97], [Date.UTC(2021, 3, 4), 4.91], [Date.UTC(2021, 4, 2), 4.41], [Date.UTC(2021, 5, 5), 4.33], [Date.UTC(2021, 6, 4), 4.84], [Date.UTC(2021, 7, 3), 5.14], [Date.UTC(2021, 8, 11), 5.78], [Date.UTC(2021, 9, 6), 5.26], [Date.UTC(2021, 10, 6), 6.06], [Date.UTC(2021, 11, 5), 6.40], [Date.UTC(2022, 0, 1), 5.68], [Date.UTC(2022, 1, 2), 5.37], [Date.UTC(2022, 2, 2), 5.92], [Date.UTC(2022, 3, 5), 6.82], [Date.UTC(2022, 4, 3), 6.39], [Date.UTC(2022, 5, 4), 6.12], [Date.UTC(2022, 6, 2), 5.65], [Date.UTC(2022, 7, 2), 5.59]]}, \n","{name : 'Visual Basic',data : [[Date.UTC(2010, 8, 11), 0.33], [Date.UTC(2010, 9, 2), 0.33], [Date.UTC(2010, 10, 3), 0.32], [Date.UTC(2010, 11, 7), 0.26], [Date.UTC(2011, 0, 2), 0.26], [Date.UTC(2011, 1, 8), 0.59], [Date.UTC(2011, 2, 8), 0.56], [Date.UTC(2011, 3, 3), 0.34], [Date.UTC(2011, 4, 2), 0.48], [Date.UTC(2011, 5, 5), 0.43], [Date.UTC(2011, 5, 27), 0.43], [Date.UTC(2011, 6, 8), 0.48], [Date.UTC(2011, 7, 3), 0.46], [Date.UTC(2011, 8, 10), 0.31], [Date.UTC(2011, 9, 9), 0.48], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.36], [Date.UTC(2012, 0, 8), 0.48], [Date.UTC(2012, 1, 5), 0.80], [Date.UTC(2012, 2, 11), 0.78], [Date.UTC(2012, 3, 8), 0.98], [Date.UTC(2012, 4, 9), 1.27], [Date.UTC(2012, 5, 10), 1.22], [Date.UTC(2012, 6, 4), 0.92], [Date.UTC(2012, 7, 10), 0.88], [Date.UTC(2012, 8, 2), 0.84], [Date.UTC(2012, 9, 5), 0.60], [Date.UTC(2012, 10, 4), 0.77], [Date.UTC(2012, 11, 2), 0.89], [Date.UTC(2013, 0, 5), 1.04], [Date.UTC(2013, 1, 8), 1.01], [Date.UTC(2013, 2, 11), 0.89], [Date.UTC(2013, 3, 7), 1.10], [Date.UTC(2013, 4, 8), 1.13], [Date.UTC(2013, 5, 9), 1.07], [Date.UTC(2013, 6, 7), 1.25], [Date.UTC(2013, 6, 12), 1.25], [Date.UTC(2013, 7, 4), 1.32], [Date.UTC(2013, 8, 11), 1.84], [Date.UTC(2013, 9, 10), 1.93], [Date.UTC(2013, 10, 9), 1.97], [Date.UTC(2013, 11, 6), 1.69], [Date.UTC(2014, 0, 1), 1.56], [Date.UTC(2014, 1, 8), 1.80], [Date.UTC(2014, 2, 3), 1.86], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.26], [Date.UTC(2014, 5, 8), 1.91], [Date.UTC(2014, 6, 6), 1.49], [Date.UTC(2014, 7, 11), 2.01], [Date.UTC(2014, 8, 1), 1.27], [Date.UTC(2014, 9, 3), 1.56], [Date.UTC(2014, 10, 8), 1.66], [Date.UTC(2014, 11, 7), 1.80], [Date.UTC(2015, 0, 6), 1.07], [Date.UTC(2015, 1, 5), 1.72], [Date.UTC(2015, 2, 7), 1.95], [Date.UTC(2015, 3, 13), 2.20], [Date.UTC(2015, 4, 13), 1.89], [Date.UTC(2015, 5, 6), 1.84], [Date.UTC(2015, 6, 12), 1.95], [Date.UTC(2015, 7, 6), 1.78], [Date.UTC(2015, 8, 5), 1.53], [Date.UTC(2015, 9, 4), 1.51], [Date.UTC(2015, 10, 7), 1.68], [Date.UTC(2015, 11, 4), 1.65], [Date.UTC(2016, 0, 2), 1.68], [Date.UTC(2016, 1, 2), 1.86], [Date.UTC(2016, 2, 3), 1.67], [Date.UTC(2016, 3, 7), 1.61], [Date.UTC(2016, 4, 6), 1.83], [Date.UTC(2016, 5, 5), 2.25], [Date.UTC(2016, 6, 4), 2.01], [Date.UTC(2016, 7, 6), 2.05], [Date.UTC(2016, 8, 8), 1.76], [Date.UTC(2016, 9, 7), 1.99], [Date.UTC(2016, 10, 5), 1.92], [Date.UTC(2016, 11, 4), 1.97], [Date.UTC(2017, 0, 7), 1.91], [Date.UTC(2017, 1, 8), 1.88], [Date.UTC(2017, 2, 7), 2.01], [Date.UTC(2017, 3, 9), 2.06], [Date.UTC(2017, 4, 6), 2.35], [Date.UTC(2017, 5, 3), 2.01], [Date.UTC(2017, 6, 7), 2.10], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.75], [Date.UTC(2017, 9, 5), 1.42], [Date.UTC(2017, 10, 12), 1.49], [Date.UTC(2017, 11, 9), 1.35], [Date.UTC(2018, 0, 3), 2.31], [Date.UTC(2018, 1, 8), 2.18], [Date.UTC(2018, 2, 7), 1.74], [Date.UTC(2018, 3, 1), 1.80], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.15], [Date.UTC(2018, 6, 7), 0.89], [Date.UTC(2018, 7, 1), 0.92], [Date.UTC(2018, 8, 3), 0.68], [Date.UTC(2018, 9, 5), 0.65], [Date.UTC(2018, 10, 8), 0.85], [Date.UTC(2018, 11, 2), 0.98], [Date.UTC(2019, 0, 4), 1.03], [Date.UTC(2019, 1, 6), 0.99], [Date.UTC(2019, 2, 2), 0.95], [Date.UTC(2019, 3, 7), 1.06], [Date.UTC(2019, 4, 4), 1.32], [Date.UTC(2019, 5, 9), 1.07], [Date.UTC(2019, 6, 6), 1.01], [Date.UTC(2019, 7, 5), 1.02], [Date.UTC(2019, 8, 9), 1.08], [Date.UTC(2019, 9, 5), 1.23], [Date.UTC(2019, 10, 3), 0.96], [Date.UTC(2019, 11, 6), 0.93], [Date.UTC(2020, 0, 5), 0.83], [Date.UTC(2020, 1, 4), 0.60], [Date.UTC(2020, 2, 4), 0.77], [Date.UTC(2020, 3, 2), 4.72], [Date.UTC(2020, 4, 2), 4.18], [Date.UTC(2020, 5, 1), 4.69], [Date.UTC(2020, 6, 4), 5.23], [Date.UTC(2020, 7, 2), 4.66], [Date.UTC(2020, 8, 6), 4.12], [Date.UTC(2020, 9, 4), 3.97], [Date.UTC(2020, 10, 3), 4.01], [Date.UTC(2020, 11, 3), 3.92], [Date.UTC(2021, 0, 2), 3.84], [Date.UTC(2021, 1, 6), 4.33], [Date.UTC(2021, 2, 4), 4.85], [Date.UTC(2021, 3, 4), 4.55], [Date.UTC(2021, 4, 2), 4.02], [Date.UTC(2021, 5, 5), 4.01], [Date.UTC(2021, 6, 4), 4.50], [Date.UTC(2021, 7, 3), 4.67], [Date.UTC(2021, 8, 11), 4.62], [Date.UTC(2021, 9, 6), 5.24], [Date.UTC(2021, 10, 6), 5.72], [Date.UTC(2021, 11, 5), 5.40], [Date.UTC(2022, 0, 1), 4.74], [Date.UTC(2022, 1, 2), 5.23], [Date.UTC(2022, 2, 2), 5.77], [Date.UTC(2022, 3, 5), 5.40], [Date.UTC(2022, 4, 3), 5.86], [Date.UTC(2022, 5, 4), 5.42], [Date.UTC(2022, 6, 2), 4.97], [Date.UTC(2022, 7, 2), 4.99]]}, \n","{name : 'JavaScript',data : [[Date.UTC(2001, 5, 30), 1.55], [Date.UTC(2001, 6, 30), 1.72], [Date.UTC(2001, 7, 30), 1.66], [Date.UTC(2001, 8, 28), 1.63], [Date.UTC(2001, 9, 26), 1.51], [Date.UTC(2001, 10, 28), 1.47], [Date.UTC(2001, 11, 31), 1.46], [Date.UTC(2002, 0, 30), 2.73], [Date.UTC(2002, 1, 27), 1.48], [Date.UTC(2002, 2, 29), 1.47], [Date.UTC(2002, 3, 29), 1.37], [Date.UTC(2002, 4, 29), 1.36], [Date.UTC(2002, 5, 29), 1.43], [Date.UTC(2002, 6, 31), 1.15], [Date.UTC(2002, 7, 29), 2.02], [Date.UTC(2002, 8, 29), 1.91], [Date.UTC(2002, 9, 30), 1.98], [Date.UTC(2002, 10, 29), 2.49], [Date.UTC(2002, 11, 31), 2.42], [Date.UTC(2003, 0, 31), 2.92], [Date.UTC(2003, 1, 28), 2.81], [Date.UTC(2003, 2, 31), 2.63], [Date.UTC(2003, 3, 30), 3.26], [Date.UTC(2003, 4, 30), 1.72], [Date.UTC(2003, 5, 30), 1.69], [Date.UTC(2003, 6, 31), 1.79], [Date.UTC(2003, 7, 31), 1.90], [Date.UTC(2003, 8, 30), 1.66], [Date.UTC(2003, 9, 31), 1.92], [Date.UTC(2003, 10, 30), 1.74], [Date.UTC(2003, 11, 31), 1.74], [Date.UTC(2004, 0, 31), 2.14], [Date.UTC(2004, 1, 29), 2.06], [Date.UTC(2004, 2, 31), 1.78], [Date.UTC(2004, 3, 30), 1.78], [Date.UTC(2004, 4, 30), 1.45], [Date.UTC(2004, 5, 30), 1.61], [Date.UTC(2004, 6, 31), 1.68], [Date.UTC(2004, 7, 30), 1.51], [Date.UTC(2004, 8, 30), 1.27], [Date.UTC(2004, 9, 31), 1.20], [Date.UTC(2004, 10, 30), 1.59], [Date.UTC(2004, 11, 31), 1.70], [Date.UTC(2005, 0, 31), 1.78], [Date.UTC(2005, 1, 28), 1.65], [Date.UTC(2005, 2, 31), 1.64], [Date.UTC(2005, 3, 30), 1.44], [Date.UTC(2005, 4, 31), 1.39], [Date.UTC(2005, 5, 30), 1.78], [Date.UTC(2005, 6, 31), 1.92], [Date.UTC(2005, 7, 31), 1.77], [Date.UTC(2005, 8, 30), 2.04], [Date.UTC(2005, 11, 3), 1.84], [Date.UTC(2006, 0, 4), 1.54], [Date.UTC(2006, 1, 2), 1.51], [Date.UTC(2006, 2, 1), 1.73], [Date.UTC(2006, 3, 2), 1.57], [Date.UTC(2006, 4, 1), 2.19], [Date.UTC(2006, 5, 1), 1.46], [Date.UTC(2006, 6, 2), 2.11], [Date.UTC(2006, 7, 2), 2.02], [Date.UTC(2006, 8, 2), 2.44], [Date.UTC(2006, 9, 1), 2.20], [Date.UTC(2006, 10, 2), 2.31], [Date.UTC(2006, 11, 1), 2.56], [Date.UTC(2007, 0, 2), 2.84], [Date.UTC(2007, 1, 3), 2.98], [Date.UTC(2007, 2, 3), 3.49], [Date.UTC(2007, 3, 1), 3.14], [Date.UTC(2007, 4, 5), 3.07], [Date.UTC(2007, 5, 2), 2.62], [Date.UTC(2007, 6, 2), 2.51], [Date.UTC(2007, 7, 5), 2.58], [Date.UTC(2007, 8, 2), 2.72], [Date.UTC(2007, 9, 4), 2.68], [Date.UTC(2007, 10, 4), 2.93], [Date.UTC(2007, 11, 3), 2.73], [Date.UTC(2008, 0, 3), 3.20], [Date.UTC(2008, 1, 7), 2.33], [Date.UTC(2008, 5, 1), 2.93], [Date.UTC(2008, 6, 2), 2.76], [Date.UTC(2008, 7, 3), 2.89], [Date.UTC(2008, 8, 3), 3.13], [Date.UTC(2008, 9, 6), 2.67], [Date.UTC(2008, 10, 2), 2.93], [Date.UTC(2008, 11, 3), 2.97], [Date.UTC(2009, 0, 2), 3.36], [Date.UTC(2009, 1, 1), 3.54], [Date.UTC(2009, 2, 5), 3.61], [Date.UTC(2009, 3, 7), 3.68], [Date.UTC(2009, 4, 1), 3.55], [Date.UTC(2009, 5, 4), 4.02], [Date.UTC(2009, 6, 2), 3.51], [Date.UTC(2009, 7, 1), 2.81], [Date.UTC(2009, 8, 5), 3.00], [Date.UTC(2009, 9, 2), 3.03], [Date.UTC(2009, 10, 2), 2.92], [Date.UTC(2009, 11, 2), 3.51], [Date.UTC(2010, 0, 5), 2.71], [Date.UTC(2010, 1, 7), 2.64], [Date.UTC(2010, 2, 7), 2.65], [Date.UTC(2010, 3, 5), 2.47], [Date.UTC(2010, 4, 15), 2.08], [Date.UTC(2010, 6, 6), 2.43], [Date.UTC(2010, 6, 30), 2.40], [Date.UTC(2010, 8, 11), 1.66], [Date.UTC(2010, 9, 2), 1.66], [Date.UTC(2010, 10, 3), 1.66], [Date.UTC(2010, 11, 7), 1.51], [Date.UTC(2011, 0, 2), 1.59], [Date.UTC(2011, 1, 8), 2.56], [Date.UTC(2011, 2, 8), 1.87], [Date.UTC(2011, 3, 3), 1.51], [Date.UTC(2011, 4, 2), 1.39], [Date.UTC(2011, 5, 5), 1.50], [Date.UTC(2011, 5, 27), 1.50], [Date.UTC(2011, 6, 8), 2.24], [Date.UTC(2011, 7, 3), 1.56], [Date.UTC(2011, 8, 10), 1.47], [Date.UTC(2011, 9, 9), 2.19], [Date.UTC(2011, 10, 7), 2.56], [Date.UTC(2011, 11, 4), 2.20], [Date.UTC(2012, 0, 8), 2.32], [Date.UTC(2012, 1, 5), 2.46], [Date.UTC(2012, 2, 11), 3.39], [Date.UTC(2012, 3, 8), 2.88], [Date.UTC(2012, 4, 9), 2.13], [Date.UTC(2012, 5, 10), 1.47], [Date.UTC(2012, 6, 4), 1.45], [Date.UTC(2012, 7, 10), 1.37], [Date.UTC(2012, 8, 2), 1.33], [Date.UTC(2012, 9, 5), 1.26], [Date.UTC(2012, 10, 4), 1.28], [Date.UTC(2012, 11, 2), 1.32], [Date.UTC(2013, 0, 5), 1.98], [Date.UTC(2013, 1, 8), 1.42], [Date.UTC(2013, 2, 11), 1.37], [Date.UTC(2013, 3, 7), 1.51], [Date.UTC(2013, 4, 8), 1.54], [Date.UTC(2013, 5, 9), 1.65], [Date.UTC(2013, 6, 7), 1.84], [Date.UTC(2013, 6, 12), 1.84], [Date.UTC(2013, 7, 4), 2.09], [Date.UTC(2013, 8, 11), 2.01], [Date.UTC(2013, 9, 10), 2.04], [Date.UTC(2013, 10, 9), 2.05], [Date.UTC(2013, 11, 6), 1.85], [Date.UTC(2014, 0, 1), 1.58], [Date.UTC(2014, 1, 8), 1.93], [Date.UTC(2014, 2, 3), 1.90], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.79], [Date.UTC(2014, 5, 8), 2.00], [Date.UTC(2014, 6, 6), 1.81], [Date.UTC(2014, 7, 11), 2.17], [Date.UTC(2014, 8, 1), 2.45], [Date.UTC(2014, 9, 3), 1.77], [Date.UTC(2014, 10, 8), 2.09], [Date.UTC(2014, 11, 7), 2.43], [Date.UTC(2015, 0, 6), 3.27], [Date.UTC(2015, 1, 5), 3.51], [Date.UTC(2015, 2, 7), 3.63], [Date.UTC(2015, 3, 13), 3.30], [Date.UTC(2015, 4, 13), 3.13], [Date.UTC(2015, 5, 6), 2.30], [Date.UTC(2015, 6, 12), 2.19], [Date.UTC(2015, 7, 6), 2.16], [Date.UTC(2015, 8, 5), 2.34], [Date.UTC(2015, 9, 4), 2.29], [Date.UTC(2015, 10, 7), 2.47], [Date.UTC(2015, 11, 4), 2.36], [Date.UTC(2016, 0, 2), 2.57], [Date.UTC(2016, 1, 2), 2.20], [Date.UTC(2016, 2, 3), 2.33], [Date.UTC(2016, 3, 7), 2.57], [Date.UTC(2016, 4, 6), 2.34], [Date.UTC(2016, 5, 5), 2.58], [Date.UTC(2016, 6, 4), 2.64], [Date.UTC(2016, 7, 6), 2.71], [Date.UTC(2016, 8, 8), 2.93], [Date.UTC(2016, 9, 7), 2.75], [Date.UTC(2016, 10, 5), 2.71], [Date.UTC(2016, 11, 4), 2.86], [Date.UTC(2017, 0, 7), 2.85], [Date.UTC(2017, 1, 8), 2.87], [Date.UTC(2017, 2, 7), 2.67], [Date.UTC(2017, 3, 9), 2.85], [Date.UTC(2017, 4, 6), 3.07], [Date.UTC(2017, 5, 3), 3.02], [Date.UTC(2017, 6, 7), 2.61], [Date.UTC(2017, 7, 2), 2.10], [Date.UTC(2017, 8, 6), 2.02], [Date.UTC(2017, 9, 5), 3.01], [Date.UTC(2017, 10, 12), 2.97], [Date.UTC(2017, 11, 9), 2.47], [Date.UTC(2018, 0, 3), 3.47], [Date.UTC(2018, 1, 8), 3.16], [Date.UTC(2018, 2, 7), 3.92], [Date.UTC(2018, 3, 1), 3.49], [Date.UTC(2018, 4, 6), 2.92], [Date.UTC(2018, 5, 10), 2.50], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.41], [Date.UTC(2018, 8, 3), 2.13], [Date.UTC(2018, 9, 5), 2.28], [Date.UTC(2018, 10, 8), 2.66], [Date.UTC(2018, 11, 2), 3.06], [Date.UTC(2019, 0, 4), 3.30], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 2.43], [Date.UTC(2019, 3, 7), 2.51], [Date.UTC(2019, 4, 4), 2.69], [Date.UTC(2019, 5, 9), 2.72], [Date.UTC(2019, 6, 6), 2.30], [Date.UTC(2019, 7, 5), 2.26], [Date.UTC(2019, 8, 9), 2.13], [Date.UTC(2019, 9, 5), 2.08], [Date.UTC(2019, 10, 3), 1.93], [Date.UTC(2019, 11, 6), 2.09], [Date.UTC(2020, 0, 5), 2.45], [Date.UTC(2020, 1, 4), 2.06], [Date.UTC(2020, 2, 4), 2.05], [Date.UTC(2020, 3, 2), 2.38], [Date.UTC(2020, 4, 2), 2.68], [Date.UTC(2020, 5, 1), 2.27], [Date.UTC(2020, 6, 4), 2.48], [Date.UTC(2020, 7, 2), 2.87], [Date.UTC(2020, 8, 6), 2.54], [Date.UTC(2020, 9, 4), 2.14], [Date.UTC(2020, 10, 3), 2.03], [Date.UTC(2020, 11, 3), 2.35], [Date.UTC(2021, 0, 2), 2.20], [Date.UTC(2021, 1, 6), 2.27], [Date.UTC(2021, 2, 4), 2.11], [Date.UTC(2021, 3, 4), 2.44], [Date.UTC(2021, 4, 2), 2.45], [Date.UTC(2021, 5, 5), 2.33], [Date.UTC(2021, 6, 4), 2.71], [Date.UTC(2021, 7, 3), 2.95], [Date.UTC(2021, 8, 11), 2.55], [Date.UTC(2021, 9, 6), 2.19], [Date.UTC(2021, 10, 6), 2.66], [Date.UTC(2021, 11, 5), 2.30], [Date.UTC(2022, 0, 1), 2.09], [Date.UTC(2022, 1, 2), 1.83], [Date.UTC(2022, 2, 2), 2.09], [Date.UTC(2022, 3, 5), 2.41], [Date.UTC(2022, 4, 3), 2.12], [Date.UTC(2022, 5, 4), 2.09], [Date.UTC(2022, 6, 2), 1.78], [Date.UTC(2022, 7, 2), 2.33]]}, \n","{name : 'Assembly language',data : [[Date.UTC(2010, 11, 7), 0.66], [Date.UTC(2011, 0, 2), 0.86], [Date.UTC(2011, 1, 8), 1.27], [Date.UTC(2011, 2, 8), 1.34], [Date.UTC(2011, 3, 3), 0.97], [Date.UTC(2011, 4, 2), 1.04], [Date.UTC(2011, 5, 5), 0.67], [Date.UTC(2011, 5, 27), 0.67], [Date.UTC(2011, 6, 8), 0.62], [Date.UTC(2011, 7, 3), 0.60], [Date.UTC(2011, 8, 10), 0.59], [Date.UTC(2011, 9, 9), 0.62], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.56], [Date.UTC(2012, 0, 8), 0.54], [Date.UTC(2012, 1, 5), 0.52], [Date.UTC(2012, 2, 11), 0.43], [Date.UTC(2012, 3, 8), 0.47], [Date.UTC(2012, 4, 9), 0.52], [Date.UTC(2012, 5, 10), 0.54], [Date.UTC(2012, 6, 4), 0.55], [Date.UTC(2012, 7, 10), 0.50], [Date.UTC(2012, 8, 2), 0.53], [Date.UTC(2012, 9, 5), 0.57], [Date.UTC(2012, 10, 4), 0.59], [Date.UTC(2012, 11, 2), 0.58], [Date.UTC(2013, 0, 5), 0.63], [Date.UTC(2013, 1, 8), 0.64], [Date.UTC(2013, 2, 11), 0.63], [Date.UTC(2013, 3, 7), 0.71], [Date.UTC(2013, 4, 8), 0.64], [Date.UTC(2013, 5, 9), 0.50], [Date.UTC(2013, 6, 7), 0.58], [Date.UTC(2013, 6, 12), 0.58], [Date.UTC(2013, 7, 4), 0.62], [Date.UTC(2013, 8, 11), 0.48], [Date.UTC(2013, 9, 10), 0.47], [Date.UTC(2013, 10, 9), 0.53], [Date.UTC(2013, 11, 6), 0.58], [Date.UTC(2014, 0, 1), 0.49], [Date.UTC(2014, 1, 8), 0.40], [Date.UTC(2014, 2, 3), 0.73], [Date.UTC(2014, 3, 10), 0.85], [Date.UTC(2014, 4, 7), 0.77], [Date.UTC(2014, 5, 8), 0.77], [Date.UTC(2014, 6, 6), 0.78], [Date.UTC(2014, 7, 11), 0.65], [Date.UTC(2014, 8, 1), 0.58], [Date.UTC(2014, 9, 3), 0.41], [Date.UTC(2014, 10, 8), 0.60], [Date.UTC(2014, 11, 7), 0.52], [Date.UTC(2015, 0, 6), 1.17], [Date.UTC(2015, 1, 5), 0.75], [Date.UTC(2015, 2, 7), 0.62], [Date.UTC(2015, 3, 13), 0.66], [Date.UTC(2015, 4, 13), 0.76], [Date.UTC(2015, 5, 6), 0.75], [Date.UTC(2015, 6, 12), 1.54], [Date.UTC(2015, 7, 6), 1.76], [Date.UTC(2015, 8, 5), 1.81], [Date.UTC(2015, 9, 4), 1.57], [Date.UTC(2015, 10, 7), 1.88], [Date.UTC(2015, 11, 4), 1.93], [Date.UTC(2016, 0, 2), 2.09], [Date.UTC(2016, 1, 2), 1.83], [Date.UTC(2016, 2, 3), 1.85], [Date.UTC(2016, 3, 7), 2.19], [Date.UTC(2016, 4, 6), 1.88], [Date.UTC(2016, 5, 5), 2.12], [Date.UTC(2016, 6, 4), 2.28], [Date.UTC(2016, 7, 6), 2.36], [Date.UTC(2016, 8, 8), 2.42], [Date.UTC(2016, 9, 7), 2.23], [Date.UTC(2016, 10, 5), 2.44], [Date.UTC(2016, 11, 4), 2.54], [Date.UTC(2017, 0, 7), 2.70], [Date.UTC(2017, 1, 8), 2.11], [Date.UTC(2017, 2, 7), 2.23], [Date.UTC(2017, 3, 9), 2.17], [Date.UTC(2017, 4, 6), 2.86], [Date.UTC(2017, 5, 3), 2.25], [Date.UTC(2017, 6, 7), 2.24], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.64], [Date.UTC(2017, 9, 5), 2.37], [Date.UTC(2017, 10, 12), 1.72], [Date.UTC(2017, 11, 9), 1.47], [Date.UTC(2018, 0, 3), 2.06], [Date.UTC(2018, 1, 8), 1.83], [Date.UTC(2018, 2, 7), 1.71], [Date.UTC(2018, 3, 1), 1.65], [Date.UTC(2018, 4, 6), 1.00], [Date.UTC(2018, 5, 10), 0.92], [Date.UTC(2018, 6, 7), 1.15], [Date.UTC(2018, 7, 1), 1.41], [Date.UTC(2018, 8, 3), 1.23], [Date.UTC(2018, 9, 5), 1.25], [Date.UTC(2018, 10, 8), 1.11], [Date.UTC(2018, 11, 2), 1.37], [Date.UTC(2019, 0, 4), 1.20], [Date.UTC(2019, 1, 6), 1.38], [Date.UTC(2019, 2, 2), 1.41], [Date.UTC(2019, 3, 7), 1.71], [Date.UTC(2019, 4, 4), 1.82], [Date.UTC(2019, 5, 9), 1.48], [Date.UTC(2019, 6, 6), 1.39], [Date.UTC(2019, 7, 5), 1.11], [Date.UTC(2019, 8, 9), 1.38], [Date.UTC(2019, 9, 5), 1.31], [Date.UTC(2019, 10, 3), 1.02], [Date.UTC(2019, 11, 6), 1.07], [Date.UTC(2020, 0, 5), 0.88], [Date.UTC(2020, 1, 4), 1.11], [Date.UTC(2020, 2, 4), 1.25], [Date.UTC(2020, 3, 2), 1.16], [Date.UTC(2020, 4, 2), 1.12], [Date.UTC(2020, 5, 1), 0.97], [Date.UTC(2020, 6, 4), 0.94], [Date.UTC(2020, 7, 2), 1.04], [Date.UTC(2020, 8, 6), 1.30], [Date.UTC(2020, 9, 4), 1.08], [Date.UTC(2020, 10, 3), 1.17], [Date.UTC(2020, 11, 3), 1.35], [Date.UTC(2021, 0, 2), 1.64], [Date.UTC(2021, 1, 6), 1.65], [Date.UTC(2021, 2, 4), 1.97], [Date.UTC(2021, 3, 4), 2.32], [Date.UTC(2021, 4, 2), 2.43], [Date.UTC(2021, 5, 5), 2.05], [Date.UTC(2021, 6, 4), 2.40], [Date.UTC(2021, 7, 3), 2.03], [Date.UTC(2021, 8, 11), 2.42], [Date.UTC(2021, 9, 6), 2.06], [Date.UTC(2021, 10, 6), 2.52], [Date.UTC(2021, 11, 5), 2.25], [Date.UTC(2022, 0, 1), 1.85], [Date.UTC(2022, 1, 2), 1.60], [Date.UTC(2022, 2, 2), 1.90], [Date.UTC(2022, 3, 5), 2.35], [Date.UTC(2022, 4, 3), 1.92], [Date.UTC(2022, 5, 4), 1.85], [Date.UTC(2022, 6, 2), 1.65], [Date.UTC(2022, 7, 2), 2.17]]}, \n","{name : 'SQL',data : [[Date.UTC(2001, 5, 30), 2.96], [Date.UTC(2001, 6, 30), 2.77], [Date.UTC(2001, 7, 30), 2.38], [Date.UTC(2001, 8, 28), 2.36], [Date.UTC(2001, 9, 26), 2.24], [Date.UTC(2001, 10, 28), 1.84], [Date.UTC(2001, 11, 31), 1.87], [Date.UTC(2002, 0, 30), 1.94], [Date.UTC(2002, 1, 27), 2.09], [Date.UTC(2002, 2, 29), 2.06], [Date.UTC(2002, 3, 29), 2.33], [Date.UTC(2002, 4, 29), 2.36], [Date.UTC(2002, 5, 29), 2.53], [Date.UTC(2002, 6, 31), 2.66], [Date.UTC(2002, 7, 29), 2.65], [Date.UTC(2002, 8, 29), 2.54], [Date.UTC(2002, 9, 30), 2.64], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.52], [Date.UTC(2003, 0, 31), 2.56], [Date.UTC(2003, 1, 28), 2.51], [Date.UTC(2003, 2, 31), 2.56], [Date.UTC(2003, 3, 30), 2.65], [Date.UTC(2003, 4, 30), 3.12], [Date.UTC(2003, 5, 30), 3.04], [Date.UTC(2003, 6, 31), 2.99], [Date.UTC(2003, 7, 31), 3.24], [Date.UTC(2003, 8, 30), 3.72], [Date.UTC(2003, 9, 31), 3.70], [Date.UTC(2003, 10, 30), 2.93], [Date.UTC(2003, 11, 31), 3.10], [Date.UTC(2004, 0, 31), 3.51], [Date.UTC(2004, 1, 29), 3.10], [Date.UTC(2004, 2, 31), 2.97], [Date.UTC(2004, 3, 30), 2.44], [Date.UTC(2018, 1, 8), 2.36], [Date.UTC(2018, 2, 7), 2.69], [Date.UTC(2018, 3, 1), 2.65], [Date.UTC(2018, 4, 6), 1.99], [Date.UTC(2018, 5, 10), 2.34], [Date.UTC(2018, 6, 7), 2.33], [Date.UTC(2018, 7, 1), 2.32], [Date.UTC(2018, 8, 3), 2.06], [Date.UTC(2018, 9, 5), 2.04], [Date.UTC(2018, 10, 8), 1.84], [Date.UTC(2018, 11, 2), 2.18], [Date.UTC(2019, 0, 4), 2.28], [Date.UTC(2019, 1, 6), 1.90], [Date.UTC(2019, 2, 2), 1.93], [Date.UTC(2019, 3, 7), 2.27], [Date.UTC(2019, 4, 4), 2.56], [Date.UTC(2019, 5, 9), 2.22], [Date.UTC(2019, 6, 6), 1.98], [Date.UTC(2019, 7, 5), 1.63], [Date.UTC(2019, 8, 9), 1.94], [Date.UTC(2019, 9, 5), 1.93], [Date.UTC(2019, 10, 3), 1.69], [Date.UTC(2019, 11, 6), 1.84], [Date.UTC(2020, 0, 5), 1.50], [Date.UTC(2020, 1, 4), 1.53], [Date.UTC(2020, 2, 4), 1.83], [Date.UTC(2020, 3, 2), 2.17], [Date.UTC(2020, 4, 2), 2.09], [Date.UTC(2020, 5, 1), 1.73], [Date.UTC(2020, 6, 4), 1.40], [Date.UTC(2020, 7, 2), 1.46], [Date.UTC(2020, 8, 6), 1.76], [Date.UTC(2020, 9, 4), 1.57], [Date.UTC(2020, 10, 3), 1.54], [Date.UTC(2020, 11, 3), 1.53], [Date.UTC(2021, 0, 2), 1.61], [Date.UTC(2021, 1, 6), 1.72], [Date.UTC(2021, 2, 4), 1.87], [Date.UTC(2021, 3, 4), 1.83], [Date.UTC(2021, 4, 2), 1.71], [Date.UTC(2021, 5, 5), 1.88], [Date.UTC(2021, 6, 4), 1.53], [Date.UTC(2021, 7, 3), 1.47], [Date.UTC(2021, 8, 11), 1.80], [Date.UTC(2021, 9, 6), 2.17], [Date.UTC(2021, 10, 6), 2.11], [Date.UTC(2021, 11, 5), 1.79], [Date.UTC(2022, 0, 1), 1.80], [Date.UTC(2022, 1, 2), 1.55], [Date.UTC(2022, 2, 2), 1.85], [Date.UTC(2022, 3, 5), 2.28], [Date.UTC(2022, 4, 3), 1.87], [Date.UTC(2022, 5, 4), 1.94], [Date.UTC(2022, 6, 2), 1.64], [Date.UTC(2022, 7, 2), 1.70]]}, \n","{name : 'PHP',data : [[Date.UTC(2001, 5, 30), 1.90], [Date.UTC(2001, 6, 30), 1.38], [Date.UTC(2001, 7, 30), 1.55], [Date.UTC(2001, 8, 28), 1.55], [Date.UTC(2001, 9, 26), 1.78], [Date.UTC(2001, 10, 28), 4.87], [Date.UTC(2001, 11, 31), 7.27], [Date.UTC(2002, 0, 30), 8.27], [Date.UTC(2002, 1, 27), 7.44], [Date.UTC(2002, 2, 29), 7.03], [Date.UTC(2002, 3, 29), 5.05], [Date.UTC(2002, 4, 29), 5.22], [Date.UTC(2002, 5, 29), 5.18], [Date.UTC(2002, 6, 31), 6.50], [Date.UTC(2002, 7, 29), 5.35], [Date.UTC(2002, 8, 29), 4.96], [Date.UTC(2002, 9, 30), 5.28], [Date.UTC(2002, 10, 29), 7.30], [Date.UTC(2002, 11, 31), 7.61], [Date.UTC(2003, 0, 31), 4.49], [Date.UTC(2003, 1, 28), 4.01], [Date.UTC(2003, 2, 31), 4.61], [Date.UTC(2003, 3, 30), 4.53], [Date.UTC(2003, 4, 30), 4.78], [Date.UTC(2003, 5, 30), 3.83], [Date.UTC(2003, 6, 31), 4.68], [Date.UTC(2003, 7, 31), 5.44], [Date.UTC(2003, 8, 30), 5.80], [Date.UTC(2003, 9, 31), 3.57], [Date.UTC(2003, 10, 30), 5.74], [Date.UTC(2003, 11, 31), 6.31], [Date.UTC(2004, 0, 31), 7.26], [Date.UTC(2004, 1, 29), 7.63], [Date.UTC(2004, 2, 31), 9.76], [Date.UTC(2004, 3, 30), 7.17], [Date.UTC(2004, 4, 30), 8.71], [Date.UTC(2004, 5, 30), 10.32], [Date.UTC(2004, 6, 31), 10.43], [Date.UTC(2004, 7, 30), 8.23], [Date.UTC(2004, 8, 30), 7.42], [Date.UTC(2004, 9, 31), 7.59], [Date.UTC(2004, 10, 30), 11.45], [Date.UTC(2004, 11, 31), 9.48], [Date.UTC(2005, 0, 31), 10.28], [Date.UTC(2005, 1, 28), 9.41], [Date.UTC(2005, 2, 31), 8.72], [Date.UTC(2005, 3, 30), 9.20], [Date.UTC(2005, 4, 31), 7.97], [Date.UTC(2005, 5, 30), 9.17], [Date.UTC(2005, 6, 31), 7.87], [Date.UTC(2005, 7, 31), 8.89], [Date.UTC(2005, 8, 30), 9.67], [Date.UTC(2005, 11, 3), 9.63], [Date.UTC(2006, 0, 4), 9.40], [Date.UTC(2006, 1, 2), 8.92], [Date.UTC(2006, 2, 1), 9.95], [Date.UTC(2006, 3, 2), 10.88], [Date.UTC(2006, 4, 1), 10.22], [Date.UTC(2006, 5, 1), 9.59], [Date.UTC(2006, 6, 2), 10.35], [Date.UTC(2006, 7, 2), 9.64], [Date.UTC(2006, 8, 2), 9.13], [Date.UTC(2006, 9, 1), 9.86], [Date.UTC(2006, 10, 2), 9.21], [Date.UTC(2006, 11, 1), 8.54], [Date.UTC(2007, 0, 2), 7.94], [Date.UTC(2007, 1, 3), 8.85], [Date.UTC(2007, 2, 3), 9.46], [Date.UTC(2007, 3, 1), 8.64], [Date.UTC(2007, 4, 5), 8.74], [Date.UTC(2007, 5, 2), 8.87], [Date.UTC(2007, 6, 2), 8.65], [Date.UTC(2007, 7, 5), 9.70], [Date.UTC(2007, 8, 2), 10.20], [Date.UTC(2007, 9, 4), 9.50], [Date.UTC(2007, 10, 4), 8.69], [Date.UTC(2007, 11, 3), 8.39], [Date.UTC(2008, 0, 3), 9.20], [Date.UTC(2008, 1, 7), 9.89], [Date.UTC(2008, 5, 1), 10.21], [Date.UTC(2008, 6, 2), 9.52], [Date.UTC(2008, 7, 3), 9.35], [Date.UTC(2008, 8, 3), 9.24], [Date.UTC(2008, 9, 6), 8.61], [Date.UTC(2008, 10, 2), 8.94], [Date.UTC(2008, 11, 3), 9.13], [Date.UTC(2009, 0, 2), 8.88], [Date.UTC(2009, 1, 1), 8.78], [Date.UTC(2009, 2, 5), 9.48], [Date.UTC(2009, 3, 7), 9.89], [Date.UTC(2009, 4, 1), 9.92], [Date.UTC(2009, 5, 4), 9.67], [Date.UTC(2009, 6, 2), 9.27], [Date.UTC(2009, 7, 1), 9.39], [Date.UTC(2009, 8, 5), 10.16], [Date.UTC(2009, 9, 2), 10.36], [Date.UTC(2009, 10, 2), 10.18], [Date.UTC(2009, 11, 2), 9.77], [Date.UTC(2010, 0, 5), 10.07], [Date.UTC(2010, 1, 7), 10.00], [Date.UTC(2010, 2, 7), 9.91], [Date.UTC(2010, 3, 5), 9.66], [Date.UTC(2010, 4, 15), 9.07], [Date.UTC(2010, 6, 6), 8.57], [Date.UTC(2010, 6, 30), 9.18], [Date.UTC(2010, 8, 11), 8.37], [Date.UTC(2010, 9, 2), 8.32], [Date.UTC(2010, 10, 3), 7.81], [Date.UTC(2010, 11, 7), 7.51], [Date.UTC(2011, 0, 2), 7.83], [Date.UTC(2011, 1, 8), 6.97], [Date.UTC(2011, 2, 8), 6.57], [Date.UTC(2011, 3, 3), 6.58], [Date.UTC(2011, 4, 2), 6.51], [Date.UTC(2011, 5, 5), 6.60], [Date.UTC(2011, 5, 27), 6.60], [Date.UTC(2011, 6, 8), 6.18], [Date.UTC(2011, 7, 3), 6.13], [Date.UTC(2011, 8, 10), 6.60], [Date.UTC(2011, 9, 9), 6.82], [Date.UTC(2011, 10, 7), 6.10], [Date.UTC(2011, 11, 4), 6.00], [Date.UTC(2012, 0, 8), 5.70], [Date.UTC(2012, 1, 5), 5.64], [Date.UTC(2012, 2, 11), 5.55], [Date.UTC(2012, 3, 8), 5.29], [Date.UTC(2012, 4, 9), 5.71], [Date.UTC(2012, 5, 10), 5.29], [Date.UTC(2012, 6, 4), 5.01], [Date.UTC(2012, 7, 10), 5.52], [Date.UTC(2012, 8, 2), 5.61], [Date.UTC(2012, 9, 5), 5.67], [Date.UTC(2012, 10, 4), 5.73], [Date.UTC(2012, 11, 2), 5.54], [Date.UTC(2013, 0, 5), 5.55], [Date.UTC(2013, 1, 8), 5.07], [Date.UTC(2013, 2, 11), 4.81], [Date.UTC(2013, 3, 7), 5.43], [Date.UTC(2013, 4, 8), 5.78], [Date.UTC(2013, 5, 9), 5.99], [Date.UTC(2013, 6, 7), 7.19], [Date.UTC(2013, 6, 12), 7.19], [Date.UTC(2013, 7, 4), 6.69], [Date.UTC(2013, 8, 11), 6.43], [Date.UTC(2013, 9, 10), 6.09], [Date.UTC(2013, 10, 9), 5.38], [Date.UTC(2013, 11, 6), 5.28], [Date.UTC(2014, 0, 1), 4.61], [Date.UTC(2014, 1, 8), 4.22], [Date.UTC(2014, 2, 3), 3.70], [Date.UTC(2014, 3, 10), 2.77], [Date.UTC(2014, 4, 7), 3.39], [Date.UTC(2014, 5, 8), 2.85], [Date.UTC(2014, 6, 6), 2.92], [Date.UTC(2014, 7, 11), 2.86], [Date.UTC(2014, 8, 1), 3.12], [Date.UTC(2014, 9, 3), 2.94], [Date.UTC(2014, 10, 8), 3.04], [Date.UTC(2014, 11, 7), 2.75], [Date.UTC(2015, 0, 6), 3.78], [Date.UTC(2015, 1, 5), 3.17], [Date.UTC(2015, 2, 7), 4.00], [Date.UTC(2015, 3, 13), 3.01], [Date.UTC(2015, 4, 13), 2.72], [Date.UTC(2015, 5, 6), 2.87], [Date.UTC(2015, 6, 12), 2.89], [Date.UTC(2015, 7, 6), 2.73], [Date.UTC(2015, 8, 5), 2.53], [Date.UTC(2015, 9, 4), 2.56], [Date.UTC(2015, 10, 7), 3.25], [Date.UTC(2015, 11, 4), 2.79], [Date.UTC(2016, 0, 2), 2.71], [Date.UTC(2016, 1, 2), 2.77], [Date.UTC(2016, 2, 3), 2.77], [Date.UTC(2016, 3, 7), 2.99], [Date.UTC(2016, 4, 6), 2.99], [Date.UTC(2016, 5, 5), 3.23], [Date.UTC(2016, 6, 4), 3.27], [Date.UTC(2016, 7, 6), 3.17], [Date.UTC(2016, 8, 8), 2.85], [Date.UTC(2016, 9, 7), 2.74], [Date.UTC(2016, 10, 5), 3.13], [Date.UTC(2016, 11, 4), 2.92], [Date.UTC(2017, 0, 7), 2.56], [Date.UTC(2017, 1, 8), 3.07], [Date.UTC(2017, 2, 7), 3.01], [Date.UTC(2017, 3, 9), 3.38], [Date.UTC(2017, 4, 6), 2.69], [Date.UTC(2017, 5, 3), 2.77], [Date.UTC(2017, 6, 7), 3.09], [Date.UTC(2017, 7, 2), 2.29], [Date.UTC(2017, 8, 6), 2.21], [Date.UTC(2017, 9, 5), 2.79], [Date.UTC(2017, 10, 12), 1.90], [Date.UTC(2017, 11, 9), 1.59], [Date.UTC(2018, 0, 3), 2.53], [Date.UTC(2018, 1, 8), 3.42], [Date.UTC(2018, 2, 7), 4.01], [Date.UTC(2018, 3, 1), 4.22], [Date.UTC(2018, 4, 6), 3.32], [Date.UTC(2018, 5, 10), 2.88], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.93], [Date.UTC(2018, 8, 3), 2.78], [Date.UTC(2018, 9, 5), 2.79], [Date.UTC(2018, 10, 8), 2.38], [Date.UTC(2018, 11, 2), 2.44], [Date.UTC(2019, 0, 4), 2.68], [Date.UTC(2019, 1, 6), 2.27], [Date.UTC(2019, 2, 2), 2.42], [Date.UTC(2019, 3, 7), 2.24], [Date.UTC(2019, 4, 4), 2.49], [Date.UTC(2019, 5, 9), 2.57], [Date.UTC(2019, 6, 6), 2.17], [Date.UTC(2019, 7, 5), 2.08], [Date.UTC(2019, 8, 9), 1.86], [Date.UTC(2019, 9, 5), 1.91], [Date.UTC(2019, 10, 3), 1.72], [Date.UTC(2019, 11, 6), 2.05], [Date.UTC(2020, 0, 5), 2.41], [Date.UTC(2020, 1, 4), 2.02], [Date.UTC(2020, 2, 4), 2.02], [Date.UTC(2020, 3, 2), 2.37], [Date.UTC(2020, 4, 2), 2.49], [Date.UTC(2020, 5, 1), 2.26], [Date.UTC(2020, 6, 4), 1.90], [Date.UTC(2020, 7, 2), 2.24], [Date.UTC(2020, 8, 6), 2.49], [Date.UTC(2020, 9, 4), 2.09], [Date.UTC(2020, 10, 3), 1.79], [Date.UTC(2020, 11, 3), 2.12], [Date.UTC(2021, 0, 2), 1.99], [Date.UTC(2021, 1, 6), 1.75], [Date.UTC(2021, 2, 4), 2.07], [Date.UTC(2021, 3, 4), 1.84], [Date.UTC(2021, 4, 2), 1.86], [Date.UTC(2021, 5, 5), 2.21], [Date.UTC(2021, 6, 4), 2.58], [Date.UTC(2021, 7, 3), 2.19], [Date.UTC(2021, 8, 11), 1.85], [Date.UTC(2021, 9, 6), 2.10], [Date.UTC(2021, 10, 6), 1.81], [Date.UTC(2021, 11, 5), 1.50], [Date.UTC(2022, 0, 1), 1.40], [Date.UTC(2022, 1, 2), 1.79], [Date.UTC(2022, 2, 2), 1.92], [Date.UTC(2022, 3, 5), 1.64], [Date.UTC(2022, 4, 3), 1.52], [Date.UTC(2022, 5, 4), 1.25], [Date.UTC(2022, 6, 2), 1.20], [Date.UTC(2022, 7, 2), 1.39]]}]"]},{"cell_type":"markdown","metadata":{},"source":["遍历列表,将日期部分拼接为一个字符串,根据日期和当月热度可绘制折线图:"]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","with open('/data/bigfiles/0aa17cd5-9be7-4c69-a413-3482db106ca9.txt', 'r', encoding='utf-8') as fr:\n"," tiobe = fr.read() # 读文件到字符会串\n","tiobe = eval(tiobe.replace('name : ', '').replace(',data ', '').replace('Date.UTC', ''))\n","\n","# print(tiobe)\n","for line in tiobe:\n"," lan_name = list(line.keys())[0] # 当前处理的语言名,字符串\n"," data = line[lan_name] # 当前处理的语言的热度数据列表\n"," date_of_lan = [f'{x[0][0]}-{x[0][1]:02}-{x[0][2]:02}' for x in data]\n"," rank = [x[1] for x in data]\n"," plt.plot(date_of_lan, rank, label=lan_name)\n"," plt.legend(loc='lower left')\n","plt.xticks(\n"," ['2002-00-30', '2004-00-31', '2006-00-04', '2008-00-03', '2010-00-05', '2012-00-08', '2014-00-01', '2016-00-02', '2018-00-03', '2020-00-05', '2022-00-01'],\n"," ['2002', '2004', '2006', '2008', '2010', '2012', '2014', '2016', '2018', '2020', '2022']) # , rotation=-45\n","plt.show()\n"]},{"cell_type":"code","execution_count":10,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import matplotlib as mpl\n","\n","mpl.rcParams['figure.figsize'] = (20,10) # 修改图片大小\n","plt.rcParams['figure.dpi'] = 300 # default for me was 75\n","\n","def read_txt():\n"," \"\"\"读文本文件中的数据为字符串,替换转为字典,返回字典\"\"\"\n"," with open('/data/bigfiles/0aa17cd5-9be7-4c69-a413-3482db106ca9.txt', 'r', encoding='utf-8') as fr:\n"," tiobe_str = fr.read() # 读文件到字符会串\n"," tiobe_dic = eval(tiobe_str.replace('name : ', '').replace(',data ', '').replace('Date.UTC', ''))\n"," return tiobe_dic\n","\n","\n","def plot_ranking_curve(tiobe_dic):\n"," for line in tiobe_dic: # 遍历字典,逐条绘制\n"," lan_name = list(line.keys())[0] # 当前处理的语言名,字符串\n"," data = line[lan_name] # 当前处理的语言的热度数据列表\n"," date_of_lan = [f'{x[0][0]}-{x[0][1]:02}-{x[0][2]:02}' for x in data] # 格式化日期,月和日用2位数,不足时补0\n"," rank = [x[1] for x in data]\n"," plt.plot(date_of_lan, rank, label=lan_name, linewidth=2)\n","\n","\n","def draw_label():\n"," plt.title('TIOBE Programming Community index')\n"," plt.xlabel('year')\n"," plt.ylabel('Ratings(%)')\n"," plt.legend(loc='lower left')\n"," plt.xticks(\n"," ['2002-00-30', '2004-00-31', '2006-00-04', '2008-00-03', '2010-00-05', '2012-00-08', '2014-00-01', '2016-00-02', '2018-00-03', '2020-00-05', '2022-00-01'],\n"," ['2002', '2004', '2006', '2008', '2010', '2012', '2014', '2016', '2018', '2020', '2022']) # , rotation=-45\n"," \n","\n","\n","if __name__ == '__main__':\n"," tiobe_dict = read_txt()\n"," plot_ranking_curve(tiobe_dict)\n"," draw_label()\n"," plt.show()\n"]},{"cell_type":"raw","metadata":{},"source":["\u003cimg src=\"https://www.educoder.net/api/attachments/3394588?type=image/png\"\u003e"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["plt.xticks(date_of_lan[::12],[x[:4] for x in date_of_lan[::12]],rotation=-45)"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# 修改x刻度\n","plt.xticks(\n"," ['2002-00-30', '2004-00-31', '2006-00-04', '2008-00-03', '2010-00-05', '2012-00-08', '2014-00-01', '2016-00-02', '2018-00-03', '2020-00-05', '2022-00-01'],\n"," ['2002', '2004', '2006', '2008', '2010', '2012', '2014', '2016', '2018', '2020', '2022']) # , rotation=-45\n","\n","# 改变图例位置\n","plt.legend(bbox_to_anchor=(0., -0.13, 1., -.13), loc=8,\n"," ncol=5, mode=\"expand\", borderaxespad=0.)\n","# 增加横向主网格\n","plt.grid(which='major', axis='y', color='k', linestyle='-.', linewidth=0.7)\n"]},{"cell_type":"code","execution_count":9,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import matplotlib as mpl\n","\n","mpl.rcParams['figure.figsize'] = (20,10) # 修改图片大小\n","plt.rcParams['figure.dpi'] = 300 # default for me was 75\n","\n","def read_txt():\n"," \"\"\"读文本文件中的数据为字符串,替换转为字典,返回字典\"\"\"\n"," with open('/data/bigfiles/0aa17cd5-9be7-4c69-a413-3482db106ca9.txt', 'r', encoding='utf-8') as fr:\n"," tiobe_str = fr.read() # 读文件到字符会串\n"," tiobe_dic = eval(tiobe_str.replace('name : ', '').replace(',data ', '').replace('Date.UTC', ''))\n"," return tiobe_dic\n","\n","\n","def plot_ranking_curve(tiobe_dic):\n"," for line in tiobe_dic:\n"," lan_name = list(line.keys())[0] # 当前处理的语言名,字符串\n"," data = line[lan_name] # 当前处理的语言的热度数据列表\n"," date_of_lan = [f'{x[0][0]}-{x[0][1]:02}-{x[0][2]:02}' for x in data]\n"," rank = [x[1] for x in data]\n"," plt.plot(date_of_lan, rank, label=lan_name, linewidth=2)\n","\n","\n","def draw_label():\n"," plt.title('TIOBE Programming Community index')\n"," plt.xlabel('year')\n"," plt.ylabel('Ratings(%)')\n","\n"," # 修改x刻度\n"," plt.xticks(\n"," ['2002-00-30', '2004-00-31', '2006-00-04', '2008-00-03', '2010-00-05', '2012-00-08', '2014-00-01', '2016-00-02', '2018-00-03', '2020-00-05', '2022-00-01'],\n"," ['2002', '2004', '2006', '2008', '2010', '2012', '2014', '2016', '2018', '2020', '2022']) # , rotation=-45\n"," \n"," # 改变图例位置\n"," plt.legend(bbox_to_anchor=(0., -0.13, 1., -.13), loc=8, ncol=5, mode=\"expand\", borderaxespad=0.)\n"," \n"," # 增加横向主网格\n"," plt.grid(which='major', axis='y', color='k', linestyle='-.', linewidth=0.7)\n","\n","\n","if __name__ == '__main__':\n"," tiobe_dict = read_txt()\n"," plot_ranking_curve(tiobe_dict)\n"," draw_label()\n"," plt.show()\n"]},{"cell_type":"code","execution_count":8,"metadata":{"scrolled":true},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import matplotlib as mpl\n","\n","mpl.rcParams['figure.figsize'] = (20,10) # 修改图片大小\n","plt.rcParams['figure.dpi'] = 300 # default for me was 75\n","\n","def read_txt():\n"," \"\"\"读文本文件中的数据为字符串,替换转为字典,返回字典\"\"\"\n"," with open('/data/bigfiles/0aa17cd5-9be7-4c69-a413-3482db106ca9.txt', 'r', encoding='utf-8') as fr:\n"," tiobe_str = fr.read() # 读文件到字符会串\n"," tiobe_dic = eval(tiobe_str.replace('name : ', '').replace(',data ', '').replace('Date.UTC', ''))\n"," return tiobe_dic\n","\n","\n","def plot_ranking_curve(tiobe_dic):\n"," \"\"\"逐条绘制排名前4的程序设计语言曲线,Python语言曲线宽度设为4,突出显示\"\"\" \n"," for line in tiobe_dic[:4]: # 只绘制排名前4的语言\n"," lan_name = list(line.keys())[0] # 当前处理的语言名,字符串\n"," if lan_name == 'Python':\n"," width = 4\n"," else:\n"," width = 2\n"," data = line[lan_name] # 当前处理的语言的热度数据列表\n"," date_of_lan = [f'{x[0][0]}-{x[0][1]:02}-{x[0][2]:02}' for x in data]\n"," rank = [x[1] for x in data]\n"," plt.plot(date_of_lan, rank, label=lan_name, linewidth=width)\n","\n","\n","def draw_label():\n"," plt.title('TIOBE Programming Community index')\n"," plt.xlabel('year')\n"," plt.ylabel('Ratings(%)')\n","\n"," # 修改x刻度\n"," plt.xticks(\n"," ['2002-00-30', '2004-00-31', '2006-00-04', '2008-00-03', '2010-00-05', '2012-00-08', '2014-00-01', '2016-00-02', '2018-00-03', '2020-00-05', '2022-00-01'],\n"," ['2002', '2004', '2006', '2008', '2010', '2012', '2014', '2016', '2018', '2020', '2022']) # , rotation=-45\n"," \n"," # 改变图例位置\n"," plt.legend(bbox_to_anchor=(0., -0.13, 1., -.13), loc=8, ncol=5, mode=\"expand\", borderaxespad=0.)\n"," \n"," # 增加横向主网格\n"," plt.grid(which='major', axis='y', color='k', linestyle='-.', linewidth=0.7)\n","\n","\n","if __name__ == '__main__':\n"," tiobe_dict = read_txt()\n"," plot_ranking_curve(tiobe_dict)\n"," draw_label()\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["# 2. 面向对象方法"]},{"cell_type":"markdown","metadata":{},"source":["## 2.1 matplotlib.figure.Figure"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=\u003cclass 'matplotlib.figure.Figure'\u003e, clear=False, **kwargs)\n"]},{"cell_type":"markdown","metadata":{},"source":["该函数的功能就是为了创建一个图形figure,或者激活一个已经存在的图形figure"]},{"cell_type":"markdown","metadata":{},"source":["### 1. num:int or str, optional"]},{"cell_type":"markdown","metadata":{},"source":["合法值为整数或者一个字符串,可选。该关键字是一个figure独一无二的ID标识,当num是整数的时候,该整数即为Figure.number属性的值,如果是字符串,则Figure.number属性的值自动加1。下面看一个例子:\n"," 该例子展示了plt.figure()中关键字num的作用,当存在多个figure的时候,就可以通过调用plt.figure(),传入对应的ID标识即可激活对应的figure,其中figure是有对应的编号的,可以传入数字来激活。"]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import numpy as np\n","\n","x = np.linspace(-np.pi, np.pi, 256)\n","y1 = np.sin(x)\n","y2 = np.cos(x)\n"," \n","fig1 = plt.figure(num='first')\n","fig1.suptitle('first figure')\n","plt.plot(x, y1)\n"," \n","fig2 = plt.figure(num='second')\n","fig2.suptitle('second figure')\n","plt.plot(x, y2)\n"," \n","plt.figure(num=1) #plt.figure(num='first')\n","plt.plot(x, y2)\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["### 2. figsize:(float, float)"]},{"cell_type":"markdown","metadata":{},"source":["合法值为一个元组(float, float), default: rcParams[\"figure.figsize\"] (default: [6.4, 4.8]),分别表示宽和高,整型会被转化为浮点型float。"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","fig1 = plt.figure(figsize=(2,1))\n","fig1.suptitle('fig1')\n","plt.plot([1,2,3,4])\n"," \n","fig2 = plt.figure(figsize=(4,2))\n","fig2.suptitle('fig2')\n","plt.plot([1,2,3,4])\n"," \n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["### 3. facecolor"]},{"cell_type":"markdown","metadata":{},"source":["背景色(background color),default: rcParams[\"figure.facecolor\"] (default: 'white'),默认白色。"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","fig1 = plt.figure(figsize=(2,1),facecolor='b')\n","fig1.suptitle('fig1')\n","plt.plot([1,2,3,4])\n"," \n","fig2 = plt.figure(figsize=(4,2),facecolor='g')\n","fig2.suptitle('fig2')\n","plt.plot([1,2,3,4])\n"," \n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["### 4.clear"]},{"cell_type":"markdown","metadata":{},"source":["合法值为bool类型,default: False,主要是用来清除已经存在的figure。"]},{"cell_type":"markdown","metadata":{},"source":["### 5. 返回值"]},{"cell_type":"markdown","metadata":{},"source":["返回一个图形figure句柄。"]},{"cell_type":"markdown","metadata":{},"source":["## 将图形保存为文件"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["fig.savfig('my_figure.png')"]},{"cell_type":"markdown","metadata":{},"source":["matplotlib支持许多图形格式,具体格式由操作系统已安装的图形显示接口决定,可以通过canvas对象的方法查看系统支持的文件格式。需要注意的是,当你保存图形文件时,不需要使用plt.show()了。"]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","fig = plt.figure()\n","fig.canvas.get_supported_filetypes()"]},{"cell_type":"markdown","metadata":{},"source":["## 2.2 matplotlib.axes.Axes"]},{"cell_type":"markdown","metadata":{},"source":["matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等),其继承关系如下:"]},{"attachments":{"320415ff-ff96-4f5c-879e-826af191002f.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABAMAAAA4CAIAAAAHLqYEAAAgAElEQVR4Ae2dd1wUybr3z733fM7d3ePuuuKKacVdAwYQBCSJ5KCiCAhIEEVAMYGIYkRUBFRAoqyKIiuShqQOkhQYwAAKSEZyHCQzDGGYYdL7OdZ7+vb2xBVBPVb/od1NT9VT36p6qn7VVdV/Y8MDEoAEIAFIABKABCABSAASgAS+PgJ/+/qSDFMMCUACkAAkAAlAApAAJAAJQAJsqARgIYAEIAFIABKABCABSAASgAS+RgJQCXyNuQ7TDAlAApAAJAAJQAKQACQACUAlAMsAJAAJQAKQACQACUACkAAk8DUSgErga8x1mGZIABKABCABSAASgAQgAUgAKgFYBiABSAASgAQgAUgAEoAEIIGvkcBklQCDwRgZGSESie3wgAS+QAJEIrG/v5/JZH7C2j82Ntbd3f0FwoMmQwKQwEcj0NnZOTIy8gkdEZPJJJFInZ2dHy1JMCBI4KsnQCQSR0ZGGAzGJ6zaAqOerBIYGRmprKxMTEzE4XDx8IAEvjQCSUlJT58+HR8fF1hVpu6B+vp6PB7/pZGD9kICkMDHJIDD4aqqqqbOzwgMmUqlvnjx4uHDhx8zVTAsSOArJoDD4RITEysrKz+tyBdY9yerBDo7O+Pj47OzsysqKurhAQl8aQRycnL8/PyGh4cFVpWpe4BAINy+fftLIwfthQQggY9J4ObNm9nZ2VPnZwSGPDw8HBgYmJub+zFTBcOCBL5iAhUVFdnZ2fHx8Z2dnQIr4Cd8YLJKoKOjIy4urry8fGBggAIPSOBLI1BZWXnt2rVPqwRyc3OjoqK+NHLQXkgAEviYBO7fv08gED5hb2B4eNjf37+ysvJjpgqGBQl8xQQGBgbKy8vj4uI6Ojo+YdUWGPVHUAI4HK62tnZsbExgZPABSOBzI1BXVxcQEPBplUBeXl5cXNznRgbaAwlAAtNJIC4uLi8vbzpjxMQ1PDwcEBBQV1eHuQ8vIQFI4MMIjI2N1dbW4nA4qAQ+DCD8FSQwHQSgEpgOyjAOSAASEEQAKgFBhODfIYEvjABUAl9Ahg0PDxOJxHfv3k3eVs6gKBRKd3d3S0sLnU5ns9ljY2NdXV1tbW2ffAn5xMREX19fU1PT6Ojo5BPONQQSidTW1tbS0vJRtuXBkOQa4wffhErgg9Gx2Wyw2UhbW9vAwMBkwuEMimvIZDKZSCR2dXVNMq4v5ef/GekdHR0lEomNjY09PT00Gm2a4TOZTDKZ3Nraip6r3NTU1N7e3t/fPzExwWKxptkkXtFBJcCLjDD3P2IzgQkKc8lms2k0Wk9PT0tLC5wKIUzWTM8zVCq1q6ursbGxs7Pz88kXqASmJ/cnFUtiYqKhoeHOnTsnFcr7H3MG9fz583379q1ZswZ0XLKysnbv3q2oqNjd3T356CYTQkNDw7lz53777bfMzMzJhMPntzdu3Fi/fr2EhISXlxeZTObzpDB/wpAU5ifCPwOVgPCsOJ8cGRkJDQ1VUlLy9fXl/OtfuoMJCnMJgoqMjDQwMLC3t/9LIX+5D/9npDc1NdXAwEBUVNTR0bGmpmaas2NsbCwyMlJeXn7Gv48ffvhBTExMS0vLy8urtbX1kw/NIECgEkBQfMDJR2wmMEFhLtls9tu3b48ePbp69eqsrKwPMBX+ZCoIVFRU7NmzZ86cOTt27Hj69OlURPEBYUIl8AHQPuQnmZmZLi4uFy5c+IAfx8XF6enpmZiYCP/btra2kJAQIyOjwsJC9K84g8rLy9u9e/fSpUvBO4fMzMwdO3ZISUlN54gmVzj19fUnT54UFRVNS0tDJ4HX+djYWHR0tK2tbVRUFK9nkPssFotGo9nZ2c2ePfunn37S0NDo6uoSctSNV0QYkkhcXE9KSko8PDx27tzZ39/P9QHMTagEeGHHgOJ6CTYbkZKS8vLy4voA15tc8wgTFOYShBMeHq6jo2Ntbc012P+8m/8B6Z2YmLh27dr8+fO/++67FStWZGdnT/O3O0ZHR+/evSshIWFkZJSYmJiXl0cgEJKSkpydndXV1a2trYlE4mciBqAS4OoZhKzXf6mZAGHycn2YoDCXbDa7urr64MGDixcvnrrRNCFTDR8DBBgMRkZGxuLFi7/99ttff/31+vXr0+xneGUEVAK8yHzk+/fv39fR0dmxY8cHhMvZfRcYyNu3b52dnefPn5+eno5+mDMoIpGYmZkZEREBJuF8EiXAFQ6JRHr27FlYWFhLSws6CbzOh4eHr1y5IiUldfnyZV7PIPdpNNqbN280NDQkJCQ2bNiwaNGinJwcIdfj8ooIQxKJi+tJdna2paWluLi4kIoLKgFe2Lnixdzk2l/HPMN5yTWPMEGBghQVFfX69WskhP+AnjGSFmFO/gPSW1dX5+Dg8Msvv+jr6//000+///57T0+PMGn/WM8gSuDQoUNg0R6YL4TH4y0sLH799decnJzJv7f8KNZCJcDVMwjJlrO/LvCHvFwfJijOBggqAYFsp/kBIpHo7+//ww8/6OvrL1682MnJqbW1dZpt4BodVAJ/wtLQ0PD06dO8vDwymfzs2bPExMSEhIS8vLy+vj4mk9nf3//69eukpKSYmJj09PSOjo6JiQk2m02n05ubm/F4/L33x/379xMSErKzsxsbG6lU6sTERGlp6bFjxyQkJBQUFMAzcXFx1dXVJBKpsLAwKSmppaWlrq4uNTU1JiYmMTHx1atXvb29iGWc3Xc2m02lUtva2rKysuLj46Ojo5OSkp49e9bX10en04lEYnR0tJ6e3syZM48fP37v3r2oqKjHjx9TKBTOoLq7u58/f56cnEyhUNhsNlACa9asaWlpKSkpefjwYWxs7KNHj8rLy/l3lDs7O3NyckDqIiMjcThcRkZGRUXF2NgYMtaOTm99fX16enp0dHRkZKSDgwMnHDKZXFJSEh8fTyQS2Ww2g8EgkUgFBQWPHj2Ki4uLj4/PzMxsaGgAM+1IJBLwzosWLTI1Nb13715kZGR8fDyvxRVg94m1a9fa2tp6eHiIiopeunSpubkZYc5ms5HCMDQ09Pz586SkpPT09FevXvGKCENyYmKis7MTDOzFxsYmJSXl5eW1t7czGIz6+no/Pz8lJaV58+YFBwffu3cvJibm+fPn6Ngx51+EEsDkb1paWkxMzMOHD2tra0dHR8fHx5ubm9PS0uLi4h48eFBUVEShUJCyMTo6WlVVFRsbC/IuOjr6wYMHeXl57969m5iY4JO/nZ2deXl5jx49Ghwc5FViMd13wHZwcLC0tPTRo0fR0dGgRr99+xaZuMkrjzBBTUxM1NTUpKSkVFRUIFkGesaWlpZDQ0P5+fngg4aZmZn19fVgNQ7yJPqEvxsBfubly5d4PL6oqAgZSRoeHi4vL4+Nja2oqAAfhZmYmOjp6Xn27FlycnJMTEx8fPzTp087OjqoVCqIjsVijY2NlZeXp6Wl4XC42NhYYD+JRELbI/y5MOnln79sNlsYq0ZGRmpqatLT02NjY6Oioh49elRaWvrBZqMTGBcXt3HjRnV19aioqPnz5+/fvx/9NpXBYFRXVz969CgrKwsptKA843C4goKCvr4+sIZkaGiopKQkJSUl5v3x+PHjuro6MMjCP4GcSgCYV1tb6+bmJiIiEh0dDRoFgSTBD6lUKvBg8fHxoBq+fv0aLW/Gx8dbW1uzsrJwOBxoQV68eNHb24sULTQf9PkXoQQQ7/2XmnKQTP5tGS/PMDExUV5e/vjx47KyMtApj42NjY+PB24fAYjpvoP7DAajp6fnxYsXycnJ0dHROBzu6dOnbW1tVCqVj+vDBIVpgNDvBPB4PJ8OBmIbcjIwMPDq1SukNQcuorCwkEQiMRgMJpNJJBIfPnz4+PFj5F06g8Ho7u5OS0vLzs5G9p8RWGH5tJKIMcKf8K8aLBZrZGQkPT09JSWlrq4OaXoGBgaePXuGx+MbGxuBfxZYNfj3RvgYnJubu3v3bjExsejo6A0bNmzduhWPxyPPCwOWyWTycTIgKIF1H4kROYFKAEHxrxPQpBkYGLx48eLw4cPq6uqysrJmZmaJiYl9fX3Z2dmnTp3S1NRcs2bN+vXr//jjD/AVhvHx8dTUVGNjY4n3x5o1a1RUVAwNDf39/aurq4eHh69fv66oqDhjxowff/wRPAN+jkj20NDQ69evGxoaysjIyMrK2tra4vF45GNvnN13Go1WV1cXEhKydevWdevWSUtLKykpmZmZgQ9D5OXl7d27V0RE5O9//7uYmJiEhISsrKypqWl/fz9nUBhvApTAypUrMzMz3d3d9fT0ZGRklJWVjxw58vr1a6AW/oTs3xeAGEidpKSkoqKivr7+6dOnX716hXRBkPTeuHHj5s2bJiYmcnJykpKSCxcu5ISDmR00MDCQmZlpY2OjqampoKCgoqKyY8eOkJCQ5uZmJpPZ0NDg5ub266+/fvPNN6KiohISEmvWrFFXV3/58uW/Dfy//1ksVldXl4GBgby8/K1bt7Kzs1etWqWtrf3y5UvEO6ALw7NnzxwdHTU1Na2trb28vHhFhCHZ3t5+//59Y2NjFRUVeXl5TU3Nffv2RUVFkcnk+Ph4AwODmTNn/u///u+KFSuACjp79uz/mchx9kUoASR/b74/tm/fLiMjIycn5+HhUVRU1NjYGB4ebmJism7dOjk5OQcHh7KyMqCl2Wz2u3fvIiIilJSUQBGSkZFRV1c3MzO7f/9+W1sbn/wVpsRiuu+gT5aWlubs7KyqqiolJbV27Vptbe0LFy68fv0arM5MTEzkmkeYoDCXIN+AG9m6dWtubu7+/fvV1NRkZGT09PQ8PDza2tqQJGMymb8bYTKZ4+Pjp0+fVlRUtLe3f/fuHeP9UVxc7OLismjRohs3bhCJRDqd3tbWFhMTY2lpqaKisnbtWnl5+W3btt28ebOpqQm0czQaraio6OTJk3p6eoqKigoKClu2bPH09CwqKvqw+SfCpJd//oLVjXysYrFY4MuyFy5c0NPTk5WVlZaWVlNTO3bsGPj2NrrmYsAKvKTT6cePH1dQUHB2du7q6lJRUVFVVY2MjET6xDQaLTw8fMOGDWpqauXl5ePj40wms6WlJSAg4Jdffjl9+nRlZSVoodPT04GvkHl/gFn+RUVFtPcHnwRyVQITExOvX78+cuTIvHnzHjx4ANa7CyQJ0ltTU3Pt2rWtW7cqKSmtW7dOT0/P1dU1PT0dKQOVlZWgBZGXl5eWllZWVt6zZw8OhxsYGOBfDL4IJfBhTTlAx78tS0hI4OoZyGTyxYsXZWVljx49Gh8fb2FhIS8vD1resLAwEokEihOmmQCDXH19fdHR0bt27VJSUpKWlpaTk9u0aVNoaOjb94eQLQ5nyIhD5t/B4KwgNTU1Xl5ewBVLSEisW7dOR0fHzs4uIyMDrF/Pzc3V0NCQkpJKSkoik8ksFmt4eDg2NlZJScnS0jIvL0/ICsunlfyAGs2/ajAYDCKRaGZmJicnd+XKFTAvl8FgZGZmmpmZqaioPHjwgEKh0Gg0gVWDf2+Ekye4w2AwwsLCFBUVN27c2NPT4+DgoKCg4O7ujlS3iYkJ/mAJBMLQ0BAfJwMi4l/3uZoHlcCfsISHh2tra0tISBw8eDArK6u5uTk2Nnbr1q3Lly9PTEw8f/58ZGRkU1PT8+fPFRUVdXV1cTgc+D2TyZyYmKDRaFQqlUwmV1ZWOjk5rV+//siRI3Q6ncFg/PHHH1paWqampqBJoNFoYJzp4MGDYmJimpqavr6+JSUlbW1tERERMjIyxsbGT548AYFzdt+bm5svX748a9YsW1tbAoHQ2NgYHx+vrq6+YMGC6OhoEolUVVXl6Og4b948PB4PYgT9G86gMO4D9KsWLly4bdu2P/74o7q6ury8/MqVK3PmzHF2dn7z5s2feKEumEwmnU4HcVEolIaGBh8fHzU1NT09PWTYADgmMTExbW1tX1/f0tLSsbExGo0WERHBCQejBJ4/f75hwwYtLa2EhAQikQiGbfbt25eTkzM6OspisQYHB728vNasWePp6YkkGWnLUZayx8fHS0tLFyxYYGZmlpWVBVbwiIiI4HC48fFx5ElQGFatWmVra5uamkokEqlUKoPB4BURhmR4eLiqqqqxsXFhYWFPT09TU1NcXNyBAwfq6+spFMqTJ0/Mzc2XL1/e1tYGrOUzWsxms78gJSAmJrZp06aQkJCysrKGhgYXFxdJSckDBw5ERkY6OztXVlbW1dW5u7vLysru3bt3cHAQAGexWAwGA6AYHx/v7e3Ny8vbvn27oqLijRs36HQ6L+zClFhMf51KpT5//lxVVVVZWTkwMLC1tRXMppOUlDQxMens7ATjXlzzCBMU5hKkBZSclStX2tjYpKamNjU15ebmHj58eM6cOdeuXWtra0PKGOaEvxthsVj19fUHDhxYtWrV5cuXyWTy0NCQh4fHypUrra2te3t7WSxWd3f3jRs3REVFjYyM8Hh8a2trYWHhsWPH5syZExISAl6R9fX1GRoaamhoXLt2DWycVVJS4ubmFhkZ+WHj68Kkl3/+MhgM/laBdy+bN2+Wk5M7f/58fX09aPV13h8VFRW89BWGMOclGMvcuHGjmppaZGTk0NDQmTNnli9f7ubmhozFsNlsIpEYEBAgIiLi5OT09u3b0dHRhISExYsX6+rqFhQUsFgsMpmcnZ29ZMkSLS0toLuampp8fHzWrFlz+PDhxsZG/gnkVAIMBqOtrc3b21tGRkZJSQlZNCyQJEjjyZMn1dXVnZ2d6+vrBwcHq6urg4ODvby8wPvtlpYWZ2fn5cuX79u3r6ioqKOjIyUlZefOnYsWLcrMzBwaGuIEhdz5UpTAhzXl4N0On7aMTqdz9QxACcjIyMjLy7u6uj5//ryzs/Phw4fbtm2Tk5OLiYkB7xsxzQSbze7r60tISJg/f76BgUFsbGxzc3NBQcH27duXLl3q5ubW09PDy/VhgsJcIu8EBHYwkJxFTtBljEKhtLe3x8TEaGlpycnJEQgEsGFaWlraggULduzYkZ2dTaPRqqqqpKWlN2zYEBUVBfxYTU2NwArLp5VEBhARqwSeoM3mbERA+1JaWqqpqamhoQGkfn9/v4WFhays7IULF0BvQZiqwb83wsvOgYEBV1dXcXFx4L1v3LihrKxsYGAwNDSEdFRIJBIfsOAFER8nA6LmX/e5mgeVwJ+whIeHq6iorFu3Ljk5ua+vj0ajEYnEoKCgf/7zn2pqaomJid3d3VQqta+v7+rVq7KyspcuXUL3HUFYTCaTQqEUFRXt2bNHT0+vrq6OTqdznQpfXV29f//+mTNnOjk5FRQUjI2Nga0zz507p6mpefToUSAWObvv8fHxurq6ioqKxcXFw8PDVCq1p6fn8ePHYmJiNjY2+fn5wq8TwLiPzMxMY2Pj2bNn+/n51dbWjo+PUyiUurq6Xbt2bdiw4datW0iR/RO4P1+A8YC3b996enqKiYnl5uaCmUWc6QW6nysctBJgMpkpKSnz588/d+5cTU3NxPuDTCY3NTWRyWRAiddkyj+b9q+rtrY2Pz+/mTNnent7t7S0dHV1RUREiIiInDx5sqqqCnkeFAYZGZmoqKienh5kIz9eEaFJMhgMT09PWVnZ0NDQ/v5+0K709/c3NzeDAcW/OtP0S1ECoDyfOHGipKSEQqGMj49XVFRoaGgsW7bs6NGjDQ0NFAqFSqU+efLE2tp61apVyAtZBDs4Aa9fCQSCqqrqkSNH2traeGEXpsRi+uuDg4P79u2TlZX18PDo6uqi0Wjj4+M1NTUHDhyQlpYOCgoCXUCueYQJCnMJjMeUHBqNNjw8/OTJky1btigqKubm5gpTibi6kfHxcTwev2PHDklJyYyMjMuXL2tqahoYGLx58wZsfInH4w0NDdetW/fixYvBwUEajTY6OlpeXq6trW1hYZGamspisTo6OpYtW2Zvb5+XlweGJMbGxtrb23t7e/nLUUweIZcfkF5M/ra2tvK3ikQiHT9+XF5e/ty5c2DWBJ1O7+3t9fX11dLSOn36NP/OK2Iq58nY2FhMTIyUlJSNjU1lZeX4+HhmZqa8vLyZmdmzZ8+Q5ycmJoqLi/fv379kyZLQ0NCwsDBjY+PVq1enp6cD+VRWVmZtbb1y5cp79+6BQkWj0d69e+fg4GBgYPD777/zTyCiBObOnSsjIwPe1axdu3bVqlUGBgaPHz9GT7NErEKmTaJrCphIZmpqumXLloSEBDB+MT4+3tXVRSQSgR8LCQnR0tKysLBoaGgYHR0FE/CSk5MVFBT27t2LnuqGjgucfylKYPJNOZi0RqVSMW0ZV88AlMDy5csNDQ1TU1NHRkbA+MWdO3f09PQ2b97c3d3NYrHQzQTgWVxcbGhouHLlytjY2P7+fuAuiouLtbW1N27ciMPheLk+TFCYS6AEhOlgcGYx+g6LxZqYmOjo6IiNjV24cOHNmzd7e3sZDEZXV5e7u7ucnJyLi0tSUpKtre1vv/12/fp1MJtXmAorsJVEm/EB5xgn09bWBt4G37x5U0dHZ9u2bbm5ucePH5eRkTl69CjyoTqBVUOY3ghXa588eWJgYKCsrPzy5UsajVZYWGhhYSEnJ5eSkoLMtuAPlr+TuXHjhjB1n6ttUAn8CUt4eLiysrKOjg6yUQOdTn/48OFPP/2koqLy/Plz0HOlUCiPHz+Wk5NzdnYGu23S6fTi4uLw8PBz5845OzsfPHhw9+7dkpKSCgoK2dnZVCqVa2e3urrawcFhxowZt27dQu90/ujRo63vDzBrE6MEGAzG1atXJSQkDh06hAypMpnM9vZ2DQ0N8F57MkrAyMhIVFT0xYsXyEb+o6OjYWFhsrKyp0+f5jVqyGAw6urq4uLiLly44OLicvjwYVtbWzU1tVmzZt2/fx/MT+WVXq5w0EqAxWJlZGQsWrTIyMgIh8OBrsCfco7N5uUuMY+x2eyioiJ9ff1FixYlJSWB3mpZWZm4uPjGjRsfPHiAPA8Kg6amZnNzM7qHxCsitCNmsVg+Pj6rV6+2s7PLzc0FQgIJmc1mc21L0A9gzqdfCTQ1NbW2tiLz5tlstsBvDIP8/f777+/evQt6ZkATGhsbi4uLnzlzBukBV1dXnzp1SlRUtLCwEETBYrFGR0cJBEJwcPDp06ednJz2799vZWW1YMECKysroHi5rgjPzMwUWGLR/XXQFZaSktLT00tKSkI402i04OBgOTk5c3Nz8OKYax6hg2K/L3WBgYGYXYm4lpympqaLFy/OnTs3JiYGqVlI7OBEoBths9ldXV13796VkpIyMDCQlJTU19ePiIigUqksFovJZPr7+0tLSzs4OPT39yOv10kk0rFjx1RUVEJDQ1ks1rt376SkpLS1tYODg+vq6sbHx5EnMfYIeSlMevnnb1FRER+rWCxWZ2envLy8jo4ODodDW/vo0SNjY2MNDQ30DHghzQaPDQwM2NnZrVq16tKlS8PDw+AVgZGRkaKiYmBgIDooMplMIBBUVFTAKIySkpK3tzfoFTGZzMzMzGXLlhkaGhYVFaEtDA4O1tPTO3ToEJ8EstlsRAmoqal5eXmFvj+uXr1qb2+/detWJycnMC4D+qb8awoY1ba2tlZQUDhz5kxZWRkyXAKSw2AwbG1t169ff+XKFbSpoJ+xdu1aAoGATjjmfJqVAIlEKi0tRSdBmG8Mf3BTDsQV/7aMq2cASmDJkiVOTk7o9WkFBQUODg6//vprRUUFlUpFNxMgp9LS0sTExExMTEpKSgBq4DYPHDigpKR07tw5YVoc4J/R2wACJSBMBwOTv8Cqrq6ulJSUK1eunDhxwtHRce/evUZGRt9+++358+cbGhrYbPbExERVVZW1tbWqqqqmpqa4uLizs3N5eTmdTheywgpsJTkN43+Hv5MpLi4GP29ubj537hyYFblkyZJdu3ZlZGSAkRRhqoYwvRGudnp5ea1bt87c3BxMFRsYGDh79uzKlSudnZ3R3SpeYGk0mkAnI7DuczUMfEgKfmP4/+CEh4erqalt374d6bKARbRiYmIWFhalpaXgURqN9vLlS2Vl5X379jU0NNBotIKCglOnTllbW9va2u7du9fOzm7nzp2SkpIyMjJg8hnXzi4YI581axYej0fHWFxcbGVlpaamVl1dPTExgVECY2Njp0+fXrFiRUBAAHoV78DAgI2NDRjUnIwSMDY2Xrx4cXt7O9JIUKnUnJwcBQWF/fv3Y5bVIuyqqqquXbtmZWW1Z8+evXv32tvb79q1S1VV9aeffgoNDQXjBCC9IiIimPRyhYNWAmw2u7Ky0sHBQVlZ2cLCwt3d/c6dO2lpabW1tUhXlZe7RCwEJ2NjYwkJCWJiYrq6uq9evQI3+/r6wAjf1atXkQDBzGAjIyO0DACdP65dUoyLT0tL27lzp5KSkp2dnbe3d2RkZE5OTmtrKwiNa1uCMRV9Of1KICYmxtfXNyIiIi0t7c2bNwMDAzk5OXFxcWirMOcgf3/++efHjx8jhYfNZltbW6uoqKD7VS0tLd7e3j///HN6ejrQDP39/enp6aDY2NnZ2dvb29raWlpaLliwYPv27Xl5ebzyF7wT4F9i0d13Op1eW1s7f/78nTt35uXloZMQExOjoaGhrKwMupVc8wgdFB8lsGHDBkNDQ2QCKJvN7unpiYqKEhERCQ4O5vqxDmHcCLC2srLSzs7ux/eHq6tre3s7uE+hUM6ePTt37lxDQ8OQkJDb/z5CQkJMTEzExMTAJqpDQ0Nubm46OjoGBgaurq6///57cnJyWVkZMqyAZiLMOagp/NMrMH/5WEWn0+vr6xcsWAAmYf87Wf/6//jx40pKSsuWLUP3vYSxGTxDo9Gqq6ulpKQ2bNgQHR0NbrJYrFOnTq1du9bGxmZ4eBjtmYGRS5cunTFjhoGBAbIEnEajxcfHf/fdd+rq6h4eHmgL7e3tJSQkTE1N+SQQrQSQvYPA3Otnz545OxVFgagAAB5QSURBVDsvWrQI8aICSYJU3Lp1y9DQUFtb29HR0d/fPy4urqCgAEzUHB0d1dfXX7Zs2Z49e9CmXrp0SVdXd9asWfw3bp5mJQBGDW7cuJGUlPTy5cv29nYSieTv748M4nLN7g9rykFQAtsyrp4BKAFxcfGLFy+iK35DQ8OFCxd+/vnnp0+fkslkTDNBpVJxONwPP/zg6upaX1+PTsulS5eUlJT27dvHy/VhgsJcIu8EBHYw0JGC89bW1sjISEtLSxsbG/v3h42NjaGh4bfffnv8+HHklRGLxbp165aSktK3334rLi6en58P3qYKX2H5t5KchvG/I2TVYLPZaWlpBgYG//jHP2bNmnXnzh2w4h8ICWGqhsDeCMZOsN+Mubm5rKzsxYsXkb/evXtXXl5eUVGxoaEB3c3gClYYJwNC5lX3kXg5T+A7gT8xAcuMMN/wysrKEhcX37dvX2VlJXiaRqOVlJSoqKjs2bOnurp6cHDw0KFDCgoKJ06cqKioGB0dZTKZ3d3dR44cWbt2bWJiIoVC4drZra6uPnDggKioKHhrj5hSWVlpY2Ozfv16sNQMowSGhoZcXV1XrVp18+ZN9EzWwcHBAwcOrFmz5tq1a5NRAiYmJsuXLweLoZH0AuVjZ2f39u1bxE70iZ+fn4aGxo4dOwoLCwcHB8GL0du3b//000/BwcFgMwGQ3l9++SUjIwP9W65wMEqAQqFUVVWdOXNGV1dX8v2ho6Nz/vz5srIyMKGQl7tERwR2BLpw4cJ3331nbW2dnJxc8v7Iz8/fv3//woUL7ezsamtrwU/Cw8O1tLQsLS0xIfCKCOOIwZS+/fv3Kysrr1q1au3atdu3bw8KCurs7KTT6VzbEkxE6Mva2lpvb+/6+nridB2HDx9evnz5woULgQKMj4+/e/fuH3/8gbYKc44sUMNsX21ra6unpxcWFoY839HR4evrO3v2bGQd5Js3b8zMzCQlJUNDQ8EkIrD4VUtLy8jIiEAg8MKemZkpsMSiu+80Gq2iomLu3Lm2trYvXrxATGKz2QkJCbq6urKysqCnzjWP0EHxUQLq6uqmpqZoOdTf35+YmCgiIuLj44P03dGxC+NGwJBPbW3tuXPnREVFFy1adOXKFWRiDJlMPnHixDfffLNw4UIpKSmwaBX9761bt8CQZ0dHR2BgoJGRkbS09IoVK9avX+/s7Pz06VNEBqMNE3geHh4uML0C85fBYPCyikQiVVZWzp07d9asWcuWLUOnCJzr6emhN1sTaDDyQE9PT3R0tIiIyMaNG8PCwoA3KCkpcXd3Bxs/FBcXI98bZrFYJBIpNDRUWlp67ty5e/bsAXPuwYhaVFTU//zP/4iKiq5atYrTQmdnZz4JHBsbQ94JIEoAGMlgMFJSUubOnbt58+aioiI2my2QJPhhT09PbGystbW1rKysuLi4vLy8ra1tTEzM0NBQX1+fnp7e999//+uvv3KaKisri1HICC5wEhMTg8fjp8sPERMTE5cvX/7zzz+vXr3awsLi+vXr+fn5Hh4evFoiYOSHNeXgtwLbMq6eASgB8J1KdMUHox6zZ88G+5thmomxsbGoqKgff/zR3d29sbERjdrHx0dZWRnIUWHGnjAhAyUgTAcDHSk4T0pK0tfXV1RUfPz4cWdnJ41GGxsbKygoEBUVdXFxKS8vB4/R6fTExMTNmzfPmjVr/fr1NTU1oC0Gi26FqbD8W0lOw/jfEbJqMBiM/Px8Ozu777//funSpQ8ePAAvaZlM5sDAgDBVQ2BvBGMnlUolEAgKCgqysrLe3t6InwkNDdXQ0Jg9ezYej0cPxHAFC4oKfycD4uVV94eHh9ElE20kVAJoGv9/7yDMJ4GAEnBwcEAmkWOUQFdXl4SExK5du3JycpDg3r59a2dnJ1AJODg4fP/998nJyehRhJcvX+7YsUNTU7OlpYVOp2OUAI1Gc3NzW758+ZUrV9DvBJC1L2DPASG/J4BxH2Cuxfz581tbW5HBsPHx8bS0NDk5OUdHR15jb1ZWVps2bULG1dhsdnt7u4+PD0YJcP3QiTBKAAELZm2GhYXp6+t/88037u7uYHCIV08R+SE4SU1N1dfX/xuPY8OGDffv3wdPgrYEUxiEfycAAmGxWGDRiLe3t7Ky8qxZsyIjI7u7u7m2JRhT0ZdlZWX29vaurq4np+vQ09ObP38+4PRf//VfM2bMkJSUPH/+PNoqzPlklEBGRoaYmNixY8cQJUaj0YqLi1VUVAQqASMjI/4lFt19ZzKZzc3NyFo3dBIiIyNVVVXV1dUn/05AWVl5y5YtyNoSMKvnzp07s2bNwkwFRAwQxo2w2eyRkZG4uLh58+ZJSUnNnDlz48aNjx49AoHQaLRz586tXLnS398f7RmQKDAnYPrvgwcPrK2t582bZ2lpif4qAuZhPpdgJgb/9ArMXyR8TqsKCwubm5sXLlxoZWWVm5uLPDn5k4qKChsbm3/+859c/cGyZcvQPpZKpVZUVKxevXrVqlXz5s2TkJC4ffs26EPQ6fTk5GSwazP/sWowraKjowODnZcSYLPZOTk54uLiUlJSoIMuPEn0KgIXF5eVK1fKy8s/ffp0aGhoy5YtmpqasbGxH8Dw7t27J06cmC4/dNLGxkZcXPzvf//73/72t//+7//+5ptvFixYYGhoiEz24JoErt5bYFMOghLYlnH13sjsoHPnzqHHd2tqas6cOTNnzhww4RbT4NLp9KSkpB9++OHIkSMYbePu7q6oqHjo0CFeTRsmKMwlMjtIYAeDE+DVq1fl5OR8fX0RNzI4OIjH42fPno0oASaT2dPTY2pqunTp0iVLlsycOfPixYtgygDwscJXWF6tJKdh/O8IWTUGBwfd3d0XLVokKSn5j3/8Y+/evQUFBciakL9UNXj1RjB2gn0IFi9ezNXPzJgxA537vMD+JSfDte5nZWVxrmsFpkIl8Kcs+zD30dnZuWzZMhsbG/RQSnR0tJqaGqIEML15ECsybx4sXUVMAaPR5ubmYO9qzG9ZLFZoaKisrKyxsTF4qwWWidTX10tKSm7cuDE5ORkMqM+ZMyc1NRUJls1mY4LinFyYmZlpaGg4e/bsxMRE5PO3wMdJS0t7enpyXdHPYrFMTU3B8iYkOgKBYG5uLowS4LSKzWZj3gkgwbJYrPHx8b6+vpcvXy5YsGDPnj1gYR/S2/P09EQexpwwGIyAgABJSclt27YRCAREmoOTffv2rVu3zsnJCehmroUBPQyMiYjTEYPYmUzm2NjYu3fvbt++LSIicvbs2YaGBvDwkiVLeCkrjOXT/07A0dFx6dKloqKi0tLSlpaW9+7dCwsLm7p3AqmpqXPnzj158iTyinx4eNjX13f58uWIEgAz8jHYhSmxSNkA02O6u7u1tLSUlJQiIiIQzmNjY5cuXZKQkHBycgKzNrnmESYozCUIDfSMlZWVX7x4gdQX8EJs0aJFjx494rrRjTBuhMVi4fH4bdu2SUhIpKenu7m5qaqqWlhYgKUsLBYrLCxMWVnZxMSkp6eH1/APkmSwFpBEIjU3N+vq6urp6SUmJiJ/Ff5EYHppNJrA/EWi47QqISGhp6dHX19fVVU1IiICGaFAfvJhJ0wm88mTJ+Li4qqqqvfv38d4g0uXLikoKOjo6CArEMrKynbt2gWWRQYHB4N9UQoKCsDeZXl5eYqKiurq6shyMl5WcSYwMTGRlxIA7wTmzJmzYcMGsCey8CRB54bBYAwPD7e3tx89elRSUvL69etkMtnFxUVFRQW9dIeXtZz3P8k7gTlz5qxYsWLbtm2XL1/Ozs6+ePEipt+MsZOr9xZGCQjTlnH1DIgSsLGxQebPgNnFZmZmq1evbm5uZjAYmGaCxWIRCAQwPw15RQkmhpmbmysrKwNVz9X1YYLCXCJKYMaMGfw7GBh0LBbLy8tLWlo6MDAQUQK1tbVHjx79/vvvESVAIpFcXV3Xrl3r4uISGxtramq6YsWKyMhI0G34qxWWayuJMUzgpTBVg8VihYSEqKurb9u2LTs7G2wd4e7uDiZBsFisv1Q1ePVG0KayWCwikaisrKyoqHj58mWMn7l3756SktLatWuRMQ4+YIV3MrzqPnoWCdpIqATQND7wnUBvb+/mzZs1NDSuX7/e3d0NPkR19uxZsE85mB309OlTIyMjLS2thoYGpB+AzA4yNzfH4XAdHR1kMrmwsNDc3Hzjxo3Xr18HbTlnR/nZs2d79+5dunTprVu3GhoaBgcHi4uLz549O3/+/IsXL9bW1ra3t/v7+4uIiNy8ebOvrw/pE3AGhXEfYK7F3LlzHR0ds7Ozu7u73717l5KSAroXeDyexWKBmdZgWRsyguvi4qKqqurq6kokEkdGRkpLS/39/TU1NYVRAlzhoJUAhUKpqKi4detWaWlpb28v6FgnJibOmTMHmbY4NjYWFxcnIyPj6OjY0dEBktza2nr79u2LFy+WlJTQaDSwCeOaNWuuX7/OWSViYmJ0dXU3bdoEJu1xbUvATADOiDCaanh4ODc3NzY2tq6ubmhoCGyr6u3tPXv2bLC7wps3b5ydnefNm5efn8/nnR1SOqd/ncC9e/cuXbp08+bNlJSUgoKC7u7urKwsgesEuL7zEWZ2UH5+vqKioo6OTkpKSl9fX2dnZ2pqKpiyBZQA1/wFDa2JiQn/Eovpr4+MjISEhCgoKID3eGC+RHR0tL6+vpqa2pMnT8DACdc8wgSFuQT5BWbLSEpKenh4lJeXDw4ONjY2glklNjY2ZWVloKUvLCw8cuQIqPhsNlsYN/LmzZtDhw4pKyv7+fn19/dXVla6uLiAhaFgpkpxcfGxY8fExcV9fX3fvHkzNDQ0Ojra0dFBIBCSk5OrqqpoNFpHR8edO3fy8vKIROLo6CiZTH7+/LmKioqJiUlubi7X2o2UQ64nwqSXf/5mZmbyt2psbOz+/fsaGhoWFhYPHjwAe7gNDAyUl5enpqbi8Xiw+UZPTw8ej3dycsrOzka/bedqdmdnZ2Bg4M8//wzEOeYZAoFgbW29ePFiMPu5sbHRx8dHXFz8xIkTVVVVzc3NISEhK1assLe3Ly0tZTAYra2tfn5+K1ascHFxIRAI/f39YEu3wsJCPB4PPrfEBzunEkDWCTg6OoqIiLi5uYHZI/xJIps8JicnP378uKWlBXzUr6ysbM+ePXJycuAjkhkZGZaWlurq6hEREc3NzaOjo0NDQ/X19ZmZmQkJCeipoRgsYDgJPebF+cDHvVNZWens7BwUFAS+0tXY2DgwMCDMOgEdHR3MG11hlACbzRbYlnH1DMjsIE1Nzd9//725uXlkZKSiouLEiRMqKionTpwABRLT4IIJq25ubosXL3ZzcysuLiaRSK2trUFBQTIyMjY2Nq9eveLl+jBBYS7Rs4P4dzAwrSSbzQ4LC1u/fr2ZmVlFRQWJRKqvr793756Jicl3330HlEBvby8Oh5OQkLC1tc3Kyuru7k5JSVm7dq2pqSkej6fT6cJUWIGt5F+qzmw2W2DVoFKpubm5+vr6BgYGUVFRIyMjr169MjY21tXV/f3338ErXIFVQ2BvZHh4GO3bSSRSenr6ggULbG1tOb8fWldXd/z4cVFR0bCwsL6+Pv5gGxsb+TiZZ8+egQ1e+dd9rtUTKoE/YeHa+RPoPkZHR+/cuWNkZGRlZeXt7R0cHOzp6enn57dx40bknUBTU5Obm5u6uvrp06eDgoLCw8PLysqQ/fUPHjwYEBAQGBjo5+d36NChzZs3X7hwobq6GhjH2X3v6+tLTk42NDS0sLBwc3O7evXq8ePH9fX1d+/e/ezZMwqFMjQ0lJOTo6SktHv3bi8vr5s3b8bHxwOHoqenZ2JigiQb4z7A7uy//fabh4cHMMnT09POzk5DQyMsLAxshY4sIAZdNBAUHo+3s7PbsmWLh4dHUFDQlStXwMYXwigBrnAwSuD169dnzpy5evVqYGBgSEjI1atXDx8+vGXLlqSkJDAIAVbcW1lZbdu27fz586GhoREREQ8fPrSyskJyAey+qqGhgf6mFYKipqbG3t5eWlr63r17o6OjXAsDsmcCJqL29nY0yZGRETwef+7cOT8/v6CgoJCQEA8PD3t7+x07drx+/XpkZKSrqys8PFxaWtrJycnX1zcsLCw7OxuxhPNk+pVAbW1tXV0dmUxGjBFm76APVgLNzc1XrlxRU1M7ePCgj4+Pv7+/p6env7//6tWrQTHjmr/t7e3ClFhMf51Opzc0NJw6dcrExOTAgQO+vr6XL1+2srIyNTX19fVFvgHENY8wQWEuASuwv76ysjKoQYGBgW5ubpaWlps3b05NTQW7hCELiJExNv5uJD4+vqOjw8PDQ1tbe9++feAlANiyxsrKSlJSMiEhoa+vj0wmZ2Vl7d6929zc/NSpU9euXQsODgYwb926BYp9W1ubp6enl5eXv79/SEhIYGDgsWPHTExMgoKCwEczwPYA6NqNlAGuJ8Kkl3/+ZmZm8reKwWC8e/fu8uXLO3fu3Lt37+XLl4ODgwMDA69evern55eQkABWOIDVmWifw9VgcDM/P3/37t3z589HdgJFP9zW1ubj4yMiInLlypXy8vKIiAh9fX0dHZ1Xr16BlWCVlZWOjo7Lly/39fVtamoCG9E6OjpaWloeOXLEx8cHsAWmZmRk8E8gogTQewcFBgY6Oztv377d2tr65cuXYICWP0lECYAREFAAQkJCzpw5s3PnzuPHj4MPzPX390dGRlpbW+/cufPixYsBAQFBQUF+fn7e3t4RERHIN2LRQJDzaV4xPDAwUFBQAPZiBjYIuXfQBysBgW0ZV88AlAD4FhBS8Y8dO2ZsbLx3795Xr16BBSfoZgIkB/RHra2tzczMXFxcfHx8Lly4sG3bNktLy9jY2OHhYV6uDxMU5hIoAfDBIv4djJKSEnQryWazCwsLXV1dN2zYcOrUKX9/f+AhL168+OOPP7q4uBQUFOTk5BgZGSkoKMTFxYFtygYHBz09PRUVFQ8fPlxWViZMhRXYSv6l6sxms/lXjczMzIaGBnt7e1VV1cuXLwO5y2Aw7t69u2nTpi1btuTn51OpVIFVg0Kh8O+NYHx7fX396dOnRUREAgMDOTX2wMDAo0eP5s6de+jQoby8PP5gCwoKampqeDmZnJwcoAT4132kIqNPoBJA02CD8aQLFy6g775+/drMzOzKlStNTU3gPhg2c3Bw8PT0BN+4HRoaunv3ro2NjY6OztatWy9dulRSUhIUFAQGHcEef3l5eUePHtXW1lZSUtLV1Y2JiUHmVcfHxycmJtrY2Kirq2/ZssXX1xf9evHp06dHjhw5c+YM2ioSiUQgEI4cObJ582Z1dXUjIyN3d/fKykpkzR+ZTA4KCjI3N1d9f+zevXtgYIAzqDdv3nh4eJiYmID+dGFhIei1gG8Y79ixQ0tLa8eOHXfu3AH7/4CvgRYXF9vZ2Z08eRLZ+GxkZCQ1NfXQoUPa2tq6urqurq5Pnjx5/Pixjo5OfHw8eMPe3Nzs4+NjZGRUWFiITgvYZRkDp729PTQ0dPPmzeCd+MDAQFZW1qlTp7Zv3w4gOzo6pqWlIVOYwOswHA63d+9esAOMvr5+ZGTk+fPnkVy4e/fuzp07T58+TaPRkPckiCVUKvX27dsmJiZgUyauhQE8zGKxMBG9evUKQ7K9vT0hIeHQoUP6+vra2trbt28/f/48Ml2ExWKBD2zp6+urqKhoamp6eHgglnCeTL8S4LRBoBLglb9eXl5Hjhx5+PAhEibwlXp6enl5eUBsgNnhly9fNjU11dHRsbS0vH79emtrq6OjI1LMuGIHSkBCQqKqqiokJIRriQUa2NraGj27qa6u7saNGxYWFqqqqhoaGvb29jgcDr2rD9c8wgSFuQQJBCXnzJkzTU1NZ8+e3bp1q66u7v79+8FwLHhmcHAwIyNDV1c3KCgI7MoHPlLLy408ffq0urr60KFDBw8eTE9PR0gODQ09fPhQT0/v4sWLYMyYQqHU1NR4e3ubm5traWnp6upaW1v7+fmVlZUB50Cj0V6/fn316lUrKysdHR1dXV0bG5v79++3tLTwqt1IdFxPhEmvwPzlbxWIt6enJzk5+fDhw3p6empqaoaGhsePH09MTBwYGABThsCLBbTP4WowuPnkyZN9+/aZmpq+e/eOc8bRxMQEgUDQ1dU9e/YsgUDw9fU1NzePjIxEdoClUChlZWWGhobHjh0DQ31gTXBYWJitra2Ojo6GhoaJicmFCxdycnLIZDL/BFIolJSUFEtLS0XUoa2tvXPnTl9f38rKSuRNskCSIHU1NTVhYWF2dna6urpg54OgoCB0s0IikfLz80+cOLF161YNDQ19ff0DBw7cvn27vb0dWSTNld40KwFOG4RRAly9t8CmHMQlsC3j6hmAEgDfqHr+/PnBgwe1tbU3bdp0+vRpZOIHWPCNbnBBjBMTE6WlpZcuXTI2Ngaf43RycsrJyUE2l+Tq+jAtDuYS9IxBg5uZmcmng1FbW4tuJdnsf318s7i4+MSJE5s3b9bR0dm/f39sbGxtbe3mzZuDgoIKCwvBmFpAQEBraytIAviCr7Ozs729PTLJUGCF5d9K/qXqjKzA4dWI5OXlvXr1asuWLW5ubmDxPbC8t7c3MDDQzMwsNDQUzBQQWDX490Ywvr26utrZ2Xnjxo35+fno5aAIt46ODmNjYycnp6SkJIFg+TsZEKbAug8eQ/8LlQCaxnSfI0oAs9fKdNsB4/vsCXwRSuCTUARKQEpKqqur65MYACOFBL4qAl+EEpj+HEGUgK+v7/THDmOEBCZDACqBydCb7G+hEpgswa/m91AJ8MpqqAR4kYH3IYGpIACVAFeqUAlwxQJvfhEEoBL4lNkElcCnpP9FxQ2VAK/sgkqAFxl4HxKYCgJQCXClCpUAVyzw5hdBACqBT5lNXV1dCQkJHh4eyA48n9IaGPdnTAAqAV6ZU1tbe+/ePR8fH2TDO15Pwvt/lcDExASRSLx161YAj+PWrVtEIhGZwv5Xw5/S50dGRnJycngY/q/bOTk5nBuITalJ/xmBQyXANR/Hx8czMjL8/PzQnxXi+iS8+QEEYHX+AGjC/wQqAeFZwSchgU9GACqBT4b+K44YLIo1MDAAuw5w/mtgYFBWVgZ28PzcOPX29gYEBHDajNwJCAj4sC8Tf24pnWZ7oBKYZuAwOrDJMqzOU1cSoBKYOrYwZEjgoxGASuCjoYQBQQKQwCQIQCUwCXjwp5DA50gAKoHPMVegTZAAhgBUAhgg8BISgAQ+CQGoBD4JdhgpJDB1BKASmDq2MGRI4KMRgErgo6GEAUECkMAkCEAlMAl48KeQwOdIACqBzzFXoE2QAIYAVAIYIPASEoAEPgkBqAQ+CXYYKSQwdQS+LiVQVVU1NDQ0AQ9I4EsjUF1d7e/v/2m3x8nNzY2JifnSyEF7IQFI4GMSiI6ORn80d+p6J7xCHh4e9vf3r6mp+ZipgmFBAl8xgaGhoaqqKhwO19HRwavefQ73/zZJIzo7OxMSEl6+fNnY2NgJD0jgSyNQUFDwyZVAXl7eH3/88aWRg/ZCApDAxyQQHh5OIBAm2SJP5ucjIyNBQUGFhYUfM1UwLEjgKybQ2Nj48uXLhISEzs7OydTNqf7tZJXA8PBwaWlpZGRkRETEH/CABL40Avfv309JSfm02zXW1NTgcLgvjRy0FxKABD4ygdLS0qlu8vmET6VSCQRCbGzsR04VDA4S+FoJREREREZGlpaWftp5B3xqPfjTZJUAg8Egk8mtra3N8IAEvkACra2tPT09DAZDYFWZugdGRkaIROIXCA+aDAlAAh+NQFtbG5lMnjo/IzBkJpM5MDDQ3t7+0ZIEA4IEvnoCra2tZDL50/YxBNb9ySoBgRHAByABSAASgAQgAUgAEoAEIAFI4DMkAJXAZ5gp0CRIABKABCABSAASgAQgAUhgyglAJTDliGEEkAAkAAlAApAAJAAJQAKQwGdIACqBzzBToEmQACQACUACkAAkAAlAApDAlBOASmDKEcMIIAFIABKABCABSAASgAQggc+QAFQCn2GmQJMgAUgAEoAEIAFIABKABCCBKScAlcCUI4YRQAKQACQACUACkAAkAAlAAp8hAagEPsNMgSZBApAAJAAJQAKQACQACUACU04AKoEpRwwjgAQgAUgAEoAEIAFIABKABD5DAlAJfIaZAk2CBCABSAASgAQgAUgAEoAEppwAVAJTjhhGAAlAApAAJAAJQAKQACQACXyGBKAS+AwzBZoECUACkAAkAAlAApAAJAAJTDkBqASmHDGMABKABCABSAASgAQgAUgAEvgMCUAl8BlmCjQJEoAEIAFIABKABCABSAASmHIC/w+JebrbMUms+AAAAABJRU5ErkJggg=="}},"cell_type":"markdown","metadata":{},"source":[""]},{"cell_type":"markdown","metadata":{},"source":["在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!\n","\n","参数传递,返回新的 AXES 对象:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["matplotlib.axes.Axes(fig,rect,*,facecolor = None,frameon = True,sharex = None,sharey = None,label = ‘’,xscale = None,yscale = None,box_aspect = None,** kwargs)"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2.1 基本绘图"]},{"cell_type":"markdown","metadata":{},"source":["Axes.plot\t将y对x绘制为线条或标记。\n","Axes.errorbar\t将y与x绘制为带有错误栏的线和/或标记。\n","Axes.scatter\ty与y的散点图\n","Axes.plot_date\t绘制强制轴以将浮点数视为日期的图。\n","Axes.step\t绘制一个阶梯图。\n","Axes.loglog\t在x轴和y轴上使用对数缩放绘制图。\n","Axes.semilogx\t在x轴上绘制具有对数比例的图。\n","Axes.semilogy\t用y轴上的对数比例绘制图。\n","Axes.fill_between\t填充两条水平曲线之间的区域。\n","Axes.fill_betweenx\t填充两条垂直曲线之间的区域。\n","Axes.bar\t绘制条形图。\n","Axes.barh\t绘制水平条形图。\n","Axes.bar_label\t标记条形图。\n","Axes.stem\t创建一个茎图。\n","Axes.eventplot\t在给定位置绘制相同的平行线。\n","Axes.pie\t绘制饼图。\n","Axes.stackplot\t绘制堆积面积图。\n","Axes.broken_barh\t绘制矩形的水平序列。\n","Axes.vlines\t在每个x上绘制从ymin到ymax的垂直线。\n","Axes.hlines\t在从xmin到xmax的每个y上绘制水平线。\n","Axes.fill\t绘制填充的多边形。"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2.2 跨度,光谱,填充,2D数组"]},{"cell_type":"markdown","metadata":{},"source":["Axes.axhline\t在轴上添加一条水平线。\n","Axes.axhspan\t在轴上添加水平跨度(矩形)。\n","Axes.axvline\t在轴上添加一条垂直线。\n","Axes.axvspan\t在轴上添加垂直跨度(矩形)。\n","Axes.axline\t添加无限长的直线。\n","\n","Axes.acorr\t绘制x的自相关。\n","Axes.angle_spectrum\t绘制角度光谱。\n","Axes.cohere\t绘制x和y之间的相干性。\n","Axes.csd\t绘制交叉光谱密度。\n","Axes.magnitude_spectrum\t绘制幅度谱。\n","Axes.phase_spectrum\t绘制相位谱。\n","Axes.psd\t绘制功率谱密度。\n","Axes.specgram\t绘制频谱图。\n","Axes.xcorr\t绘制x和y之间的互相关。\n","\n","Axes.clabel\t标注等高线图。\n","Axes.contour\t绘制轮廓线。\n","Axes.contourf\t绘制填充轮廓。\n","\n","Axes.imshow\t将数据显示为图像,即在2D常规栅格上。\n","Axes.matshow\t将2D矩阵或数组的值绘制为颜色编码的图像。\n","Axes.pcolor\t创建具有非规则矩形网格的伪彩色图。\n","Axes.pcolorfast\t创建具有非规则矩形网格的伪彩色图。\n","Axes.pcolormesh\t创建具有非规则矩形网格的伪彩色图。\n","Axes.spy\t绘制2D阵列的稀疏模式。"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2.3 坐标轴"]},{"cell_type":"markdown","metadata":{},"source":["Axes.axis\t获取或设置某些轴属性的便捷方法。\n","Axes.set_axis_off\t关闭x和y轴。\n","Axes.set_axis_on\t开启x和y轴。\n","Axes.set_frame_on\t设置是否绘制轴矩形补丁。\n","Axes.get_frame_on\t获取是否绘制了轴矩形补丁。\n","Axes.set_axisbelow\t设置轴刻度线和网格线是在图上方还是下方。\n","Axes.get_axisbelow\t获取轴刻度和网格线是在图上方还是下方。\n","Axes.grid\t增加网格线。\n","Axes.get_facecolor\t获取轴的表面色。\n","Axes.set_facecolor\t设置轴的表面色。"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2.4 轴的范围、方向、标签、标题、图例"]},{"cell_type":"markdown","metadata":{},"source":["Axes.invert_xaxis\t反转x轴。\n","Axes.xaxis_inverted\t返回x轴是否沿“反”方向定向。\n","Axes.invert_yaxis\t反转y轴。\n","Axes.yaxis_inverted\t返回y轴是否沿“反”方向定向。\n","Axes.set_xlim\t设置x轴范围。\n","Axes.get_xlim\t返回x轴范围。\n","Axes.set_ylim\t设置y轴范围。\n","Axes.get_ylim\t返回y轴范围。\n","Axes.set_xbound\t设置x轴的上下边界。\n","Axes.get_xbound\t以递增顺序返回x轴的上下边界。\n","Axes.set_ybound\t设置y轴的上下边界。\n","Axes.get_ybound\t以递增顺序返回y轴的上下边界。\n","\n","Axes.set_xlabel\t设置x轴的标签。\n","Axes.get_xlabel\t获取xlabel文本字符串。\n","Axes.set_ylabel\t设置y轴的标签。\n","Axes.get_ylabel\t获取ylabel文本字符串。\n","Axes.set_title\t为轴设置标题。\n","Axes.get_title\t获取轴标题。\n","Axes.legend\t在轴上放置一个图例。\n","Axes.get_legend\t返回Legend实例,如果未定义图例,则返回None。\n","Axes.get_legend_handles_labels\t返回图例的句柄和标签\n","\n","\n","Axes.set_xscale\t设置x轴比例。\n","Axes.get_xscale\t返回xaxis的比例尺(以str表示)。\n","Axes.set_yscale\t设置y轴比例。\n","Axes.get_yscale\t返回yaxis的比例尺(以str表示)。\n","\n","\n","Axes.set_xticks\t设置xaxis的刻度位置。\n","Axes.get_xticks\t返回数据坐标中xaxis的刻度位置。\n","Axes.set_xticklabels\t使用字符串标签列表设置xaxis的标签。\n","Axes.get_xticklabels\t获取xaxis的刻度标签。\n","Axes.get_xmajorticklabels\t返回xaxis的主要刻度标签,作为的列表Text。\n","Axes.get_xminorticklabels\t返回xaxis的次刻度标签,作为的列表Text。\n","Axes.get_xgridlines\t返回xaxis的网格线作为Line2Ds的列表。\n","Axes.get_xticklines\t以x的列表形式返回xaxis的刻度线Line2D。\n","Axes.xaxis_date\t设置轴刻度和标签,以将沿x轴的数据视为日期。\n","Axes.set_yticks\t设置yaxis的刻度位置。\n","Axes.get_yticks\t返回数据坐标中yaxis的刻度位置。\n","Axes.set_yticklabels\t使用字符串标签列表设置yaxis标签。\n","Axes.get_yticklabels\t获取yaxis的刻度标签。\n","Axes.get_ymajorticklabels\t返回yaxis的主要刻度标签,作为的列表Text。\n","Axes.get_yminorticklabels\t返回yaxis的次要刻度标签,作为的列表Text。\n","Axes.get_ygridlines\t返回yaxis的网格线作为Line2Ds的列表。\n","Axes.get_yticklines\t返回yaxis的刻度线作为Line2Ds的列表。\n","Axes.yaxis_date\t设置轴刻度和标签,以将沿y轴的数据视为日期。\n","Axes.minorticks_off\t去除轴上的细小滴答声。\n","Axes.minorticks_on\t在轴上显示较小的刻度。\n","Axes.ticklabel_format\t配置ScalarFormatter默认情况下用于线性轴。\n","Axes.tick_params\t更改刻度线,刻度线标签和网格线的外观。"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2.5 投影"]},{"cell_type":"markdown","metadata":{},"source":["Axes.get_xaxis_transform\t获取用于绘制x轴标签,刻度线和网格线的转换。\n","Axes.get_yaxis_transform\t获取用于绘制y轴标签,刻度线和网格线的转换。\n","Axes.get_data_ratio\t返回缩放数据的纵横比。"]},{"cell_type":"markdown","metadata":{},"source":["## 2.多子图绘制"]},{"cell_type":"markdown","metadata":{},"source":["### 2.1 matplotlib.pyplot api 绘制子图 "]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," cl = ['r', 'g', 'b', 'purple']\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," plt.subplot(eval(f'22{i+1}')) # 分2x2,小于10的数可合成3位数\n"," plt.plot(x, y, color=cl[i]) # cl[i]根据i值取颜色\n","\n","\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/9.5_PDOS.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["### 2.2 面向对象方式绘制子图"]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," my_dpi = 80\n"," fig, axs = plt.subplots(2, 2, figsize=(720 / my_dpi, 480 / my_dpi), dpi=my_dpi,\n"," sharex=False, # x轴刻度值共享开启\n"," sharey=False, # y轴刻度值共享关闭 \n"," )\n"," cl = ['r', 'g', 'b', 'purple']\n","\n"," x0 = [float(ls[0]) for ls in data_lst] # 生成x的列表\n"," y0 = [float(ls[1]) for ls in data_lst] # 生成y的列表\n"," axs[0][0].plot(x0, y0, color=cl[0])\n"," \n"," x1 = [float(ls[2]) for ls in data_lst] # 生成x的列表\n"," y1 = [float(ls[3]) for ls in data_lst] # 生成y的列表\n"," axs[0][1].plot(x1, y1, color=cl[1])\n"," \n"," x2 = [float(ls[4]) for ls in data_lst] # 生成x的列表\n"," y2 = [float(ls[5]) for ls in data_lst] # 生成y的列表\n"," axs[1][0].plot(x2, y2, color=cl[2])\n"," \n"," x3 = [float(ls[6]) for ls in data_lst] # 生成x的列表\n"," y3 = [float(ls[7]) for ls in data_lst] # 生成y的列表\n"," axs[1][1].plot(x3, y3, color=cl[3])\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/9.5_PDOS.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["### 2.3 matplotlib.pyplot add_subplot方式添加子图"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," cl = ['r', 'g', 'b', 'purple']\n"," my_dpi = 80\n"," fig = plt.figure(figsize=(640/my_dpi,480/my_dpi),dpi=my_dpi)\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," fig.add_subplot(eval(f'22{i+1}'))\n"," plt.plot(x, y, color=cl[i]) # cl[i]根据i值取颜色\n","\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/9.5_PDOS.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," plt.show()\n"]},{"cell_type":"markdown","metadata":{},"source":["### 2.4 matplotlib.gridspec.GridSpec方式添加子图"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","from matplotlib.gridspec import GridSpec\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," cl = ['r', 'g', 'b', 'purple']\n"," fig = plt.figure(dpi=100,constrained_layout=True) # 类似于tight_layout,使得各子图之间的距离自动调整【类似excel中行宽根据内容自适应】\n"," gs = GridSpec(3, 3, figure=fig) # GridSpec将fiure分为3行3列,每行三个axes,gs为一个matplotlib.gridspec.GridSpec对象,可灵活的切片figure\n","\n"," x0 = [float(ls[0]) for ls in data_lst] # 生成x的列表\n"," y0 = [float(ls[1]) for ls in data_lst] # 生成y的列表\n"," ax1 = fig.add_subplot(gs[0, 0:1])\n"," plt.plot(x0, y0, color=cl[0])\n","\n","\n"," x1 = [float(ls[2]) for ls in data_lst] # 生成x的列表\n"," y1 = [float(ls[3]) for ls in data_lst] # 生成y的列表\n"," ax2 = fig.add_subplot(gs[0, 1:3])#gs[0, 0:3]中0选取figure的第一行,0:3选取figure第二列和第三列\n"," plt.plot(x1, y1, color=cl[1])\n"," plt.xlim(-5, 5)\n","\n"," x2 = [float(ls[4]) for ls in data_lst] # 生成x的列表\n"," y2 = [float(ls[5]) for ls in data_lst] # 生成y的列表\n"," ax3 = fig.add_subplot(gs[1, 0:2])\n"," plt.plot(x2, y2, color=cl[2])\n"," plt.xlim(-5, 5)\n","\n"," x3 = [float(ls[6]) for ls in data_lst] # 生成x的列表\n"," y3 = [float(ls[7]) for ls in data_lst] # 生成y的列表\n"," ax4 = fig.add_subplot(gs[1:3, 2:3])\n"," plt.plot(x3, y3, color=cl[3])\n"," plt.xlim(-5, 5)\n","\n"," ax5 = fig.add_subplot(gs[2, 0:1])\n"," plt.scatter([1, 2, 3], [4, 5, 6], marker='*')\n","\n"," ax6 = fig.add_subplot(gs[2, 1:2])\n"," plt.bar([1, 2, 3], [4, 5, 6])\n"," fig.suptitle(\"GridSpec\", color='r')\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/9.5_PDOS.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["### 2.5 任意位置绘制子图(plt.axes)"]},{"cell_type":"code","execution_count":7,"metadata":{},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","plt.rcParams['font.sans-serif'] = ['SimSun'] # 支持中文显示\n","plt.rcParams['axes.unicode_minus'] = False\n","\n","\n","def read_csv(filename):\n"," \"\"\"接收文件名为参数,读取文件中的数据到二维列表中,返回二维列表。\"\"\"\n"," with open(filename, 'r', encoding='utf-8') as fr:\n"," data_lst = [line.strip().split(',') for line in fr] # 数据转列表\n"," return data_lst\n","\n","\n","def draw_dos(data_lst):\n"," \"\"\"接收二维列表为参数,绘制数据曲线。\"\"\"\n"," cl = ['r', 'g', 'b', 'purple']\n"," loc = [[0.15, 0.7, 0.2, 0.15],[0.7, 0.7, 0.2, 0.15],[0.15, 0.3, 0.2, 0.15],[0.7, 0.3, 0.2, 0.15]]\n"," for i in range(4): # 每次循环读相邻两列数据绘制一条曲线\n"," x = [float(ls[2 * i]) for ls in data_lst] # 生成x的列表\n"," y = [float(ls[2 * i + 1]) for ls in data_lst] # 生成y的列表\n"," plt.subplot(eval(f'22{i+1}')) # 分2x2,小于10的数可合成3位数\n"," plt.plot(x, y, color=cl[i]) # cl[i]根据i值取颜色\n"," plt.axes(loc[i]) ## [left, bottom, width, height]四个参数(fractions of figure)可以非常灵活的调节子图中子图的位置\n"," plt.plot(x, y, color=cl[i]) # cl[i]根据i值取颜色\n"," plt.xlim(-10,10)\n","\n","\n","if __name__ == '__main__':\n"," file = '/data/bigfiles/9.5_PDOS.csv'\n"," dos_in_lst = read_csv(file)\n"," draw_dos(dos_in_lst)\n"," plt.show()"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.2"}},"nbformat":4,"nbformat_minor":4}