美文网首页
109. Graphics for communication练

109. Graphics for communication练

作者: 心惊梦醒 | 来源:发表于2022-04-11 08:10 被阅读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)
优化图例的视觉效果

相关文章

  • 109. Graphics for communication练

    28.4.4练习题   105. Graphics for communication(2)[https://ww...

  • 108. Graphics for communication练

    28.2.1练习题 通过labs()函数可以一键设置标题、副标题、字幕(说明性文字)、轴标题和图例标题。我之前比较...

  • 105. Graphics for communication(

    Scale   scales控制数据值到你所能感知到的东西的映射,正常情况下,ggplot2为你自动加上scale...

  • 106. Graphics for communication(

    缩放,zooming   三种方法控制plot limits:1)调整绘图数据;2)设置每个scale的limit...

  • 104. Graphics for communication(

    Label   为图片添加:  标题,Title:标题的目的是总结主要的发现;  副标题,subtitle:在标题...

  • 107. Graphics for communication(

    图片保存   两种主要的方法将图片从R中导出:ggsave()和knitr。ggsave()将最近的图片保存到磁盘...

  • Communication

    Communication The Cardigans For twenty-seven years I've b...

  • Communication

    世界吻你以痛 世界爱你以悲 世界只是想让你知道更多 怕温柔过了头你忘记生存 情绪总是最难以捉摸的东西 有些时候它像...

  • Communication

    大雨无情的砸到莎乐美的身上,她血水浓重的全身伤痕累累,刀切开的伤口滚着红里泛白的肉,利落整齐的伤口大小不一的遍布...

  • communication

    Communication is very important in your life. It may make...

网友评论

      本文标题:109. Graphics for communication练

      本文链接:https://www.haomeiwen.com/subject/xjddsrtx.html