109. Graphics for communication练

2022-04-11  本文已影响0人  心惊梦醒

28.4.4练习题

  105. Graphics for communication(2)

  1. 为什么下列“代替颜色scale的代码”没有覆盖了默认的scale?
# 原始代码
df <- dplyr::tibble(
  x = rnorm(10000),
  y = rnorm(10000)
)
p1<-ggplot(df, aes(x, y)) +
geom_hex() +
coord_fixed() + labs(title="default")
# 代替颜色scale的代码
p2<-ggplot(df, aes(x, y)) +
geom_hex() +
scale_colour_gradient(low = "white", high = "red") +
coord_fixed() + labs(title='scale_colour_gradient(low = "white", high = "red")')
  1. 每一个scale的第一个参数是什么?与labs()相比如何?
  2. 改变与总统任期的显示,通过:
      1)联合上文所述的两种变体;
      2)改善y-axis的展示;
      3)给每个任期标上总统的名字;
      4)添加信息丰富的图片labels;
      5)没四年设置一个break
  3. override.aes使下图中的legend更容易被看见:
ggplot(diamonds, aes(carat, price)) +
  geom_point(aes(colour = cut), alpha = 1/20)

解答:
1.geom_hex()绘制2d bin counts的六边形热图coord_fixed()函数用于生成指定纵横比(aspect ratio)的笛卡尔坐标。

# 将scale_color_gradient()变成scale_fill_gradient()就可以解决这个问题
p3<-ggplot(df, aes(x, y)) +
geom_hex() +
scale_fill_gradient(low = "white", high = "red") +
coord_fixed() + labs(title='scale_fill_gradient(low = "white", high = "red")')
ggpubr::ggarrange(p1,p2,p3,nrow=1)
color和fill的对比
  1. 有很多scale函数,似乎每个scale函数的第一个参数不一样,但总体分为两类:一类是第一个参数是 "...",另一类是第一个参数是"name",包括scale_x/y/size_*。
      与labs()相比,scale类函数的功能更全面,例如scale_x/y_contimuous()不仅可以设置x/y-axis上的标题,也可以设置坐标轴上的刻度、刻度标签等信息。labs()仅可以设置axis标题legend标题以及plot labels,即title、subtitle、caption、tag等labs()是设置axes和legend(并称guide)标题的快捷方式
      据我不严谨地查了一下,ggplot2中可以设置scale的美学属性以及scale的名字如下:
scale_name\aesthetic_name description alpha color/colour fill linetype shape size x y
binned
continuous 连续变量
date dates(class Date)
datetime datetimes(class POSXIct)
discrete 离散变量
identity -
manual 手动设置
ordinal -
brewer 使用ColorBrewer颜色画板的颜色
distiller -
fermenter -
gradient/gradient2/gradientn 使用梯度颜色:单/双/多颜色
grey -
hue -
steps/steps2/stepsn -
viridis_b/c/d 翠绿色
area -
binned_area -
log10 -
reverse -
sqrt -
time times(class hms)

  另外还有scale_linetype()scale_radius()scale_shape()scale_size()scale_type()scale_alpha()一个函数。

  1. ggplot2::presidential数据集是从艾森豪威尔(第34届)到奥巴马(第44届)共11届总统的任期信息。
# 11行4列,每列分别是总统名字、任期开始日期、任期结束日期、政党名
> presidential
# A tibble: 11 x 4
   name       start      end        party     
   <chr>      <date>     <date>     <chr>     
 1 Eisenhower 1953-01-20 1961-01-20 Republican
 2 Kennedy    1961-01-20 1963-11-22 Democratic
 3 Johnson    1963-11-22 1969-01-20 Democratic
 4 Nixon      1969-01-20 1974-08-09 Republican
 5 Ford       1974-08-09 1977-01-20 Republican
 6 Carter     1977-01-20 1981-01-20 Democratic
 7 Reagan     1981-01-20 1989-01-20 Republican
 8 Bush       1989-01-20 1993-01-20 Republican
 9 Clinton    1993-01-20 2001-01-20 Democratic
10 Bush       2001-01-20 2009-01-20 Republican
11 Obama      2009-01-20 2017-01-20 Democratic
# 添加id 和 label列
newdf <- presidential %>%
mutate(id = 33 + row_number()) %>% mutate(label=paste0(id,"th"))
# 将数字提到的“x轴标签格式化”和“根据政党标注颜色”结合到一起
p<-ggplot(data=newdf,aes(start, id, colour = party)) +
geom_point() +
geom_segment(aes(xend = end, yend = id)) +
scale_colour_manual(values = c(Republican = "red", Democratic = "blue")) +
#  并优化y-axis
scale_y_continuous(name=list(y="the Order of Presidency"),breaks=newdf$id, labels=newdf$label) + 
# 标注每任总统的名字
geom_text(aes(x=start,y=id,label=name,hjust="left",vjust="bottom"),nudge_y=0.15, show.legend=FALSE)
# 优化图片的labels
p1<- p +scale_x_date(name=list(x="Date from the 18th Century"), breaks = newdf$start, date_labels = "'%y") 

# 将x-axis改为4年一个间隔
new_break = seq(min(newdf$start),max(newdf$end),by=365*4+1)
p2<-p + scale_x_date(breaks=new_break) + theme(axis.text.x = element_text(angle=45,hjust=1,vjust=1))

ggpubr::ggarrange(p1,p2,nrow=1)
总统任期可视化的优化
  1. 结果如下:
p <- ggplot(diamonds, aes(carat, price)) +
  geom_point(aes(colour = cut), alpha = 1/20)
  
p1 <- p + ggtitle(label="Poorly Visual Legend")

p2 <- p+guides(color=guide_legend(override.aes = list(alpha=1))) + ggtitle(label="Well Visual Legend")

ggpubr::ggarrange(p1,p2,nrow=1)
优化图例的视觉效果
上一篇 下一篇

猜你喜欢

热点阅读