仅使用1列值绘制R中的直方图

时间:2017-10-21 11:55:04

标签: r

我有一个包含2列的CSV,第一列显示帐户的推文数量,第二列显示帐户名称。

1    billy
8    johno
3    bobby
1    Rob

我正在尝试绘制推文数量的频率。所以1条推文的频率为2。

这是我目前的代码。

UniqFreq <-read.csv("Uniq.csv", header = FALSE)
hist(x=UniqFreq[,1], freq = TRUE)

问题是目前我的直方图看起来像垃圾。它x轴像250长,这是不成比例的。

使用第一列数据绘制直方图上数字频率的任何帮助或建议都会非常有用。

2 个答案:

答案 0 :(得分:3)

<强> INPUT

df <- data.frame(value = c(1,2,4,1), name = c("bob","john","bob","james"))
df
#   value  name
# 1     1   bob
# 2     2  john
# 3     4   bob
# 4     1 james

<强>予。推文计数频率

df
#   value  name
# 1     1   bob
# 2     2  john
# 3     4   bob
# 4     1 james

vec <- table(df$value)
vec
# 1 2 4 
# 2 1 1 

xx <- barplot(table(df$value), xlab = "Tweet Count", ylab = "Frequency of Tweet Counts", main = "Frequency of Tweets posted \nBased on Tweet Count", cex.main = 1, ylim = c(0,10))
text(x = xx, y = vec, label = vec, pos = 3, cex = 1, col = "blue")

enter image description here

<强> II。每人推文数

df
#   value  name
# 1     1   bob
# 2     2  john
# 3     4   bob
# 4     1 james

vec <- tapply(df$value, df$name, sum)
vec
# bob james  john 
#   5     1     2 

xx <- barplot(vec, ylim = c(0,10), main = "Count of tweets per person")
text(x = xx, y = vec, label = vec, pos = 3, cex = 1, col = "blue")

enter image description here

答案 1 :(得分:0)

您的数据

df <- read.table(text="1    billy
8    johno
3    bobby
1    Rob", header=FALSE)

使用ggplotdplyr

的解决方案
library(dplyr)
library(ggplot2)

df %>%
  count(V1) %>% 
  ggplot(data=., aes(x=factor(V1), y=n)) + 
    geom_col() +
    xlab("Tweet Count") +
    ylab("Frequency") +
    ggtitle("Frequency of Tweet Counts") +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme_classic()