我将一个csv文件上传到R studio,并试图绘制两列。第一个显示点赞次数,第二个显示分享次数。我想展示人们实际喜欢帖子时的股票数量之间的关系。
问题是我的赞数从1到1百万开始,而股份数从5到37000。
我的数据集样本(两列均为factor
类)
topMedia$likes_count
[1] 61 120 271 140 59 498 241 117 124 124 225 117 186 101
[15] 118 134 152 136 153 124 100 77 98 77 88 48 58 66
topMedia$shares_count
[1] 12 171 NULL 23 34 108 430 NULL NULL NULL 283 NULL NULL 57
[15] NULL NULL NULL 68 105 NULL NULL 7 10 45 103 22 75 16
当我使用此代码绘制散点图时。看起来很乱。
plot(as.numeric(topMedia$shares_count),as.numeric(topMedia$likes_count))
我尝试使用其他库
library(hexbin)
cols = colorRampPalette(c("#fee6ce", "#fd8d3c", "#e6550d", "#a63603"))
plot(hexbin(as.numeric(topMedia$shares_count), as.numeric(topMedia$likes_count), xbins = 40), colorcut = seq(0,1,length=20),
colramp = function(n) cols(20), legend = FALSE,xlab = 'share count', ylab = 'like count')
但是即使使用颜色,我也会得到类似的结果
哪种更好的方式显示这些值之间的关系? 谢谢。
答案 0 :(得分:1)
在这种情况下,均匀分布(“点赞”和“份额”之间应该有明显的正相关关系)可以作为暗示数字数据可能被无意加载的一个线索。另一个提示是,x和y值仅随唯一值的数量而变化,而不随基础数字数据的范围而变化。 我们需要转换因子的水平(而不是因子的值)以查看预期的数字。我们可以使用as.numeric(as.character(x))
之类的方法来做到这一点。
举个例子,假设我们有一些像这样的线性相关数据:
library(ggplot2); library(dplyr)
set.seed(42)
fake_data <- data.frame(x = runif(10000, 0, 1000000))
fake_data$y <- pmax(0, fake_data$x*rnorm(10000, 1, 2) + runif(10000, 0, 1000000))
ggplot(fake_data, aes(x,y)) + geom_point()
如果将数值数据作为因素加载(如果不包含术语read.csv
,则可以很容易地与stringsAsFactors = FALSE
进行比较),它看起来应该更像这样,与其中的数据不太相似这个问题。正在读取这里的数据,就好像它是字符数据一样,然后使其成为按字母顺序排序的因数,因为“ 1”在“ 2”之前,因此“ 10000”在“ 2”之前。
fake_data_factor <- fake_data %>%
mutate(x = as.factor(as.character(x)),
y = as.factor(as.character(y)))
x和y值现在具有与它们的字母顺序相关的值,与它们的基础级别不同。 R使用值进行排序或绘图,新数据中具有 values 最低的x值的 levels 接近100,000,而不是接近0.在下表中,第1行的100,124按字母顺序早于第8行的10,058!
fake_data_factor %>%
arrange(x) %>%
head(8)
# x y
#1 100124.688120559 0
#2 100229.354342446 289241.187250382
#3 100299.560697749 232233.101769741
#4 100354.233058169 814492.563551191
#5 100364.253856242 1183870.56252858
#6 100370.0227011 1224652.83777805
#7 100461.616180837 1507465.73704898
#8 10058.1261795014 604477.823016668
ggplot(fake_data_factor, aes(as.numeric(x),as.numeric(y))) +
geom_point()
我们可以通过将因子转换为字符(提取每个人的水平)然后将其转换为数字来返回预期的数字。
fake_data_factor %>%
ggplot(aes(as.numeric(as.character(x)),as.numeric(as.character(y)))) +
geom_point()