通常在浏览时数据很漂亮subreddit我看了看内容,心里想,“用Wolfram Language很容易做到这一点”,这时我立刻忘记了我有这个想法,继续下一篇文章(我可能也有同样的想法)。
今天我偶然发现一根柱子用户通过一个漂亮的图形直观地显示了1973年至2017年布鲁克林每小时的温度。这一次,我决定按照我的“用沃尔夫拉姆语言很容易做到这一点”的想法行事,并付诸行动。
Wolfram语言天气数据
功能使收集温度变得轻而易举(天气双关语),我能够用一行代码将所有数据导入Mathematica:
WeatherData[实体[“城市”,{“香槟”,“伊利诺伊”,“美国”}],“温度”,{{1970,1,1},今天,“天”}]
之后,只需将度数转换为华氏度,正确选择颜色(我非常喜欢原始图形中的颜色,所以我尝试模仿它们),然后创建和格式化行(单击以缩放)。
我真的不想从原创者那里拿走任何东西(这里是一个GitHub链接他的R源代码),由于他做得更仔细(他负责闰年,所以他的时间实际上是排成一行的,等等……),我只是想证明在Wolfram语言中完成类似的任务是多么容易。
这里是笔记本(也附在附件中)我曾经创建过这个(在云中,有些东西与我的桌面上的排列不太一样,但最终结果是一样的)。要为另一个城市制作相同的图表,只需在代码的第一行编辑城市实体,也许还需要编辑缩放比例,以更好地适应该地区的最高和最低温度。
代码
champagnTemp=天气数据[实体[“城市”,{“香槟”,“伊利诺伊”,“美国”}],“温度”,{{1970,1,1},今天,“天”}];datePath=champaignTemp[“datePath”]/。{x_,y_Quantity}:>{x,UnitConvert[y,“华氏度”]};{min,max}=MinMax[datePath[[All,2]]]
平均值=平均@datePath[[全部,2]
$blendingColors={RGB颜色[1/6,0,2/3],RGB颜色[2/3,1/4,5/12],RGBColor[1,9/10,0]};图形[表格[{Blend[$blendingColors,x],磁盘[{8x,0}]},{x,0,1/8}]](*快速查看出血结果的图片*)
cf[x_]:=混合[$blendingColors,x]$legend=BarLegend[{cf[#]&,{0,1}},“刻度”->{0,.5,1},”刻度标签“->(样式[#,FontFamily->“Avenir”]&/@{数量[-10,“华氏度”],数量[45,“华华氏度“],数量[100,“华氏度”]}),LegendLabel->Style[“Temperature”,FontFamily->“Avenir”]];scaledDatePath=日期路径/。{x,y}:>{x,重缩放[y,{数量[-10,“华氏度”],数量[100,“华氏度”]}]};sortedScaledByYear=分组依据[scaledDatePath,#[[1,1,1]]&];表[imgData[i]=表[#,4]和/@(混合[$blendingColors,#]和/@sortedScaledByYear[i][[All,2]])//转座,{i,sortedScaledByYear//键}];imgData[2017]=Transpose[加入[imgData[2017]//Transpose,表[{白色,白色,白色},365-长度@最后@sortedScaledByYear]]];grid=网格[加入[{{Null,列[{Style[“伊利诺伊州香槟市的日温度”,FontFamily->“Helvetica”,18,粗体],样式[“1973-2017”,FontFamily->“Avenir”,13]}],SpanFromLeft}},表格[{Style[i,FontFamily->“Avenir”],图像[imgData[i],图像大小->1200],SpanFromLeft},{i,sortedScaledByYear//键}],{{Null,Style[“January”,FontFamily->“Avenir”,13],Style[“December”,Font Family->“Avenil”,13]}}],间距->{.5,0.1},对齐->{{左、左、右}、上}];final=带边框[Labeled[grid,$legend,Right],ImageMargins->10,FrameStyle->None]SetDirectory[笔记本目录[]];finalImg=光栅化[最终,图像分辨率->200]导出[“ChampaignWeather.png”,finalImg]
附件: