数据呈现丨R VS Python,可视化效果孰强孰弱?
The following article is from R语言 Author 王路情
用Python可视化数据
import seaborn as sns
sns.set()
import matplotlib.pyplot as plt
x="wt"将权重映射到x轴。
y="hp"将horsepower映射到y轴。
hue="cyl"将填充和着色散点。
palette =['red','green','blue']手动覆盖由hue 设定的red, green和blue调色板。
data="mtcars"允许我们使用数据集中的数据。
style='cyl'为每个cyinder类别分配形状。
legend ='brief'将指定hue&size。
#sns.set_style("darkgrid")
sns.set_style("ticks")
sns.set_context("talk")
#sns.set_context("notebook", font_scale=1)
plt.figure(figsize=(10,8)) #plt.figure(figsize=(width,height))
sns.scatterplot(x="wt", y="hp", hue='cyl', palette=['red','green','blue'],
data=mtcars, style='cyl', legend='brief', sizes=(800,1000)
)
plt.title('Motor Trend Car Road Tests of 1973-74 Models', fontsize=24, fontweight='bold')
plt.xlabel("Weigt (1000lbs)").set_fontsize('22')
plt.xlabel("Weigt (1000lbs)").set_fontweight("bold")
plt.ylabel("Gross Horsepower").set_fontsize('22')
plt.ylabel("Gross Horsepower").set_fontweight("bold");
左右滑动查看更多
1. sns.set()将把默认的Seaborn主题设置到Python环境中,它还可以用来覆盖默认参数,正如我们看到的rc={'figure.figsize':(20,20)}。
col="gear"指定mtcars数据集中用于面化的列。
col_wrap=3指定了图的位置。在本例中,图将被放置在3列中。它将在一行中,因为没有指定行数。
aspect=0.6是对绘图大小的控制。我建议阅读关于这方面的文档,因为在这一点上解释起来可能会很混乱。
position=(0.5,1.05)是一个有趣的参数,因为它控制标题的位置。即使是很小的改变也能极大地改变标题的位置。
4. g.set_xlabels & g.set_ytags将像前面讨论的那样工作。
sns.set(rc={'figure.figsize':(20,20)})
sns.set_style("ticks")
sns.set_context("talk")
g = sns.relplot(x="wt", y="hp", hue='cyl', palette=['red','green','blue'],
data=mtcars, col='gear', col_wrap=3,
height=6, aspect=0.6, style='cyl', sizes=(800,1000))
g.fig.suptitle('Motor Trend Car Road Tests of 1973-74 Models' ,position=(0.5,1.05), fontweight='bold', size=18)
g.set_xlabels("Weigt (1000lbs)",fontweight='bold', size=20)
g.set_ylabels("Gross Horsepower",fontweight='bold', size=20);
左右滑动查看更多
用R可视化数据
color=cyl将根据cyl的数量为散射点的轮廓提供一种独特的颜色。
shape=cyl将为散点提供一个独特的形状,并与颜色协同工作。
fill=cyl将使用cyl填充散点,而不仅仅是轮廓线。最好是使用颜色和填充在一起(如果你仔细观察,会发现有一个很小的审美差异)。
axis.title=element_text(face='bold', size=10)的工作原理与上面的命令相同,但只适用于axis标题。
axis.ticks=element_line(size=0.5)将使图上的刻度更明显
panel.background=element_rect(color = NA)是我决定添加的一个美学度量,它去掉了图形周围的矩形边框
plot.title=element_text(face='粗体',size=11,hjust = 0.5))只需粗体显示并更改主标题的大小。hjust=0.5将标题居中对齐
scale_color_manual(break =c(" 4", "6", "8"), values=c("red", "green", "blue"))将覆盖默认的配色方案,并将红色添加到'4',绿色添加到'6',蓝色添加到'8'。这将手动覆盖散点的轮廓颜色
scale_fill_manual(break =c(" 4", "6", "8"), values=c("red", "green", "blue"))将执行与上面相同的操作,但这次是针对散点的内部。
scale_y_continuous(break = seq(0,350,50))手动覆盖y轴上的数字,从0开始,350结束,以50为增量。这将显示在主要刻度。
scale_x_continuous(break =seq(1.5、5.5、0.5),minor_break =seq(1.5、5.5、1))对x轴执行与上面相同的操作,并手动覆盖较小的刻度,但是这并不明显。
scale_shape_manual(值=c(21,4,22))将定义给每个cylinders类别的形状类型。
5. options(repr.plot.width=4, repr.plot.height=3)当您想要操纵图形的宽度和高度时,这是一个方便的命令。它在Jupyter特别有用。
library(ggplot2)
options(repr.plot.width=4, repr.plot.height=3)
p <- ggplot(mtcars, aes(x=wt, y=hp)) +
geom_point(size=1,aes(color=cyl, shape=cyl, fill=cyl)) +
labs(title='Motor Trend Car Road Tests of 1973-74 Models') +
xlab("Weigt (1000lbs)") +
ylab("Gross Horsepower") +
theme_bw() +
theme(axis.text=element_text(face='bold',
size=7),
axis.title=element_text(face='bold',
size=10),
axis.ticks=element_line(size=0.5),
panel.background=element_rect(colour = NA),
plot.title=element_text(face='bold', size=11,hjust = 0.5)) +
scale_color_manual(breaks = c("4", "6", "8"), values=c("red", "green", "blue"))+
scale_fill_manual(breaks = c("4", "6", "8"), values=c("red", "green", "blue"))+
scale_y_continuous(breaks = seq(0,350,50)) +
scale_x_continuous(breaks = seq(1.5,5.5,0.5), minor_breaks=seq(1.5,5.5,1)) +
scale_shape_manual(values=c(21,4,22))
p
左右滑动查看更多
ggplot2的另一个重要方面是它能够对数据进行分面处理,从而在一行代码中创建多个图。
options(repr.plot.width=7, repr.plot.height=4)
p + facet_grid(~gear)
左右滑动查看更多
结论
我认为主要的区别之一是,与ggplot2图形相比,Seaborn图具有更好的分辨率,并且所需的语法可以少得多(但这取决于环境)。Seaborn使用编程方法,用户可以访问Seaborn和Matplotlib中的类来操纵这些图。ggplot2使用分层的方法,用户可以按照创建图形的任何顺序添加美学和格式(我相信,尽管需要大量代码,但可以更简单)。大多数人都没有注意到,这一点对某些人可能比其他人更重要,当以图形形式保存Python绘图时,它会比R生成的图形占用更多的磁盘空间。在本文的图形中,Seaborn/Matplotlib图形比ggplot2图形占用大约6倍的磁盘空间。
_____________________________________
原文链接:
https://www.kdnuggets.com/2019/03/r-vs-python-data-visualization.html
►往期推荐
回复【Python】👉简单有用易上手
回复【学术前沿】👉机器学习丨大数据
回复【数据资源】👉公开数据
回复【可视化】👉你心心念念的数据呈现
回复【老姚专栏】👉老姚趣谈值得一看
►一周热文
工具&方法丨关于交互项的那些事(四):非线性模型中的交互效应
数据呈现 | Stata+R绘图:小提琴图,展示不同地区婚姻市场状况
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
欢迎扫描👇二维码添加关注