我有一个数据框,它的值之间有相当大的差距,所以在图表上使用对数比例是合乎逻辑的.大概是这样的:

df <- data.frame(
  Type = c("A", "B", "C", "D"),
  Value = c(1e3, 2e3, 4e5, 8e6),
  Efficiency = c(70, 72, 80, 88)

但我不想使用‘Numerical’作为‘Value’列的数据类型,而是使用‘factor’数据类型,这样图形将只有4个等间距的数据点(即-1e3、2e3、4e5、8e6),而不是一个连续的、对数比例的x轴,我不能使它等间距分布,也不能显示每个数据条目的确切值.因此,我已将该值转换为‘Factor’

# Convert set columns to specified data type
  factor_cols <- c("Type", "Value")
  df[factor_cols] <- lapply(df[factor_cols], factor)

我的问题是,我需要用科学记数法在x轴上显示数据,但无论出于什么原因,我总是得到数值较低的值和科学记数法的较高值.我使用的代码是:

  # Plot summary graph
  ggplot(df, aes(x = Value, y = Efficiency, color = Type)) +
    geom_point(size = 3, alpha = 0.7) 

only the two larger values are shown in scientific notation

我try 使用Scale_x_Display(),但似乎无济于事.

如何从'Value'字符串中生成所有值(我甚至不确定我们称之为字符串还是数据类型?)用科学计数法吗此外,如果您要使用数值格式的"值",是否有一种方法来格式化图形,使数据点均匀分布在x轴上,同时还指示x轴刻度上的相应数据值?

推荐答案

你可以用format(.., scientific=TRUE)scales::label_scientific().

df <- structure(list(Type = c("A", "B", "C", "D"), Value = c(1000, 2000, 4e+05, 8e+06), Efficiency = c(70, 72, 80, 88)), class = "data.frame", row.names = c(NA, -4L))

df |>
  transform(
    Type = factor(Type),
    Value = factor(format(Value, scientific=TRUE))
  ) |>
  ggplot(aes(x = Value, y = Efficiency, color = Type)) +
  geom_point(size = 3, alpha = 0.7)

enter image description here

R相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

在R中查找每个组不同时间段的总天数

从开始时间和结束时间导出时间

使用gcuminc,如何使用逗号格式化风险表?

用相同方法得到不同函数的ROC最优截断值

提取一个列表中单个列的重复观察结果R

如何用书面利率绘制geom_bar图

使用Scale_*_MANUAL时在图例中保留未使用的系数级别

Data.table';S GForce-将多个函数应用于多列(带可选参数)

有没有可能用shiny 的书签恢复手风琴面板?

如何在ggplot2中创建多个y轴(每个变量一个)

多元正态分布的计算

根据r中每行中的日期序列,使用列名序列创建新列

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

GOGPLATE geom_boxploy色彩疯狂

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

通过比较来自多个数据框的值和R中的条件来添加新列

如何在R中的两列以上使用联合(&U)?

将Geojson保存为R中的shapefile

通过分析特定列中的字符串在数据框中创建新的行和列