Eksen ölçeği işlevlerinden ggplot2 özel metin biçimlerinin theme () içinde ayarlanan biçim belirtimlerine uymasını nasıl sağlayabilirim?

Aug 18 2020

Ben böyle bir biçimden ggplot2 eksende bilimsel gösterim değiştirmek istediğiniz 3.23e+6için 3.23 × 10^6. Neyse ki bu soru burada yanıtlanmıştır: Bir eksendeki sayıların biçimini ggplot ile nasıl değiştirebilirim?

Temel durumlarda iyi çalışıyor. Ancak, eksen etiketinin formatını değiştirmek istediğinizde çalışmaz. Bu, bu örnekle gösterilmektedir:

library(tidyverse)
ggplot(mpg, aes(displ, hwy*10^9)) + geom_point()

#makes the scientific notation using "AeB" explicitly write out Ax10^B
fancy_scientific <- function(l) {
  # turn in to character string in scientific notation
  l <- format(l, scientific = TRUE)
  # quote the part before the exponent to keep all the digits
  l <- gsub("^(.*)e", "'\\1'e", l)
  # turn the 'e+' into plotmath format
  l <- gsub("e", "%*%10^", l)
  # return this as an expression
  parse(text=l)
}


ggplot(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
 theme(text = element_text(face = "bold")) 


Hangi sonuç:

Sorun, Y ekseni metninin, çağrıda belirtildiği gibi kalın olmamasıdır theme. Ben kullandığınızda browseriçini ne olup bittiğini görmek için fancy_scientificBen bu durumda olduğu gibi basılır sınıf "ifadesi" bir nesne döndüren görüyoruz expression('2'%*%10^+01, '3'%*%10^+01, '4'%*%10^+01)fonksiyonu ise scales::scientificben kaçınmak istediğiniz türden ancak uygun olup bilimsel gösterimi zorlamak için kullanılabilir, hangi tema spesifikasyonlarına göre belirlersem, doğrudan dizelerden oluşan bir vektör döndürür. Doğrudan görüntülenen Y eksenine dönüştürüldükleri fancy_scientificgibi bir dizi vektörünü döndürmek için değiştirdiğimde '2'%*%10^+01.

Öyleyse soru, fancy_scientificfonksiyonun çıktısını tema spesifikasyonuma nasıl uyduracağım?

Yanıtlar

JordanMandel Aug 20 2020 at 02:54

Yorumda önerildiği gibi bunu yapmanın bir yolu ggtextpakettir.

library(tidyverse)
library(ggtext)
ggplot(mpg, aes(displ, hwy*10^9)) + geom_point()


#makes the scientific notation using "AeB" explicitly write out Ax10^B
fancy_scientific <- function(l) {
  # turn in to character string in scientific notation
  l <- format(l, scientific = TRUE)
  # quote the part before the exponent to keep all the digits
  l <- gsub("^(.*)e", "'\\1'e", l)
  # turn the 'e+' into plotmath format
  l <- gsub("e", "%*%10^", l)
  # return this as an expression
  parse(text=l)
}


ggplot(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
  theme(text = element_text(face = "bold"), 
        axis.text.y = element_markdown(face = "bold")) 

Yine de bu kodu çalıştırırsanız, bazı sorunlar fark edeceksiniz. Baştaki numaranın etrafında, içindeki tek tırnak işaretlerini silerek giderilebilecek tırnak işaretleri vardır l <- gsub("^(.*)e", "'\\1'e", l). Ben belirtmek bir hata alıyorum textolarak element_markdown()anlaşılan ihtiyaç metnin diğer bölümleri için ayarlanmış olması bazı varsayılan olduğundan. Bu yüzden özellikle belirlemek zorunda axis.text.yolduğu element_markdown. Bu, görüntülenecek gerçek zaman işareti alma sorununu ortadan kaldırır. Ben cesur biçimlendirme uygulamak için nasıl bir soru cevap var çünkü varsayılan olarak ayarlama hakkında da merak ediyorum gerçi ben bu konuda soru kadar takip soracaktır element_markdowndoğru yüzden belirtmek için kullanabilirsiniz olduğunu textziyade axis.text.y.