标签: data-visualization

scale_fill_gradient2 中的不对称中点导致较短边缘上的颜色被修剪

这是我正在尝试修改的起始示例:

library(reshape2)

data <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(data),2)
melted_cormat <- melt(cormat, na.rm = TRUE)

ggplot(
  data = melted_cormat,
  aes(Var1, Var2, fill=value)
) +
  geom_tile() +
  geom_text(
    aes(Var2, Var1, label = value)
  ) +
  scale_fill_gradient2(
    low = 'red',
    high = 'blue',
    mid = 'white', 
    midpoint = 0, # <-- look at this
    limit = c(-1, 1)
  ) 
Run Code Online (Sandbox Code Playgroud)

此代码创建一个情节:

在此处输入图片说明

但是当我将唯一的中点更改为midpoint = -0.5绘图时,如下所示:

在此处输入图片说明

在我看来,输出是不正确的,因为我清楚地说明了low = 'red'并且在图中最低值颜色介于红色和白色之间。

我正在寻找一种解决方案如何保持midpoint = -0.5从 -1(红色)到 -0.5(白色)的完整渐变。

r data-visualization ggplot2

2
推荐指数
1
解决办法
3148
查看次数

在 ECharts 的 X 轴上使用 'time' 类型进行时间序列图

我正在使用 ECharts 4.0.4 ( http://echarts.baidu.com/ ) 在 X 轴上绘制一些带有时间戳的传感器数据。

已尝试使用旧系列数据和数据集(v4 上的新功能),但“时间”轴类型无法正常工作。使用“类别”可以正常工作:

var myChart = echarts.init(document.getElementById('main'));
var option = {
  legend: {},
  tooltip: {
    trigger: 'axis',
  },
  dataset: {
    source: {
      timestamp: ['2018-04-10T20:40:33Z', '2018-04-10T20:40:53Z', '2018-04-10T20:41:03Z'],
      sensor1: [1, 2, 4],
      sensor2: [5, 3, 2]
    }
  },
  xAxis: { type: 'category' },
  yAxis: { },
  series: [
    { type: 'line'},
    { type: 'line'}    
  ],
};
myChart.setOption(option);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.4/echarts.min.js"></script>

<div id="main" style="width: 500px;height:400px;"></div>
Run Code Online (Sandbox Code Playgroud)

有了“时间”,它不会:

var myChart = echarts.init(document.getElementById('main'));
var option = {
  legend: {}, …
Run Code Online (Sandbox Code Playgroud)

javascript data-visualization time-series timeserieschart echarts

2
推荐指数
3
解决办法
7913
查看次数

如何使用matplotlib在另一个图像上显示两个图像?

我有一个热图,其中包含一些值 ( model_prediction_i)。因为我想稍后在绘制之前旋转此热图,所以我必须使用plt.imsave. 然后,我的目标是,显示reference.jpg为图的背景,在其上绘图,X_test_i然后将热图也放置在该图上,这样我就可以看到背景、绘制的线和热图,它们的尺寸比背景小图片 -> 它只会遮挡一部分背景图片。作为reference.jpg在此处输入图片说明 这可能吗?

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

model_prediction_i = np.zeros((200,200))
model_prediction_i[160][160] = 1
model_prediction_i[160][161] = 1
model_prediction_i[160][162] = 1
model_prediction_i[160][163] = 1
model_prediction_i[160][164] = 1
model_prediction_i[160][165] = 1
model_prediction_i[160][166] = 1
model_prediction_i[160][167] = 1
model_prediction_i[160][168] = 1
model_prediction_i[160][169] = 1
model_prediction_i[160][170] = 1
model_prediction_i[160][171] = 1

plt.imsave('outfile.jpg', model_prediction_i, cmap='hot')
rotated_img = Image.open('outfile.jpg')
background = Image.open('reference.jpg')


X_test_i = np.zeros((5, 2)) …
Run Code Online (Sandbox Code Playgroud)

python data-visualization matplotlib

2
推荐指数
1
解决办法
6365
查看次数

ggplot 堆叠条 - 隐藏标签但保留标签定位

我在 ggplot 中有一个堆叠条形图,geom_text() 标签位于每个条形的中心。我想隐藏小条上的标签,以便图表看起来不会过于拥挤。我可以使用下面的代码来做到这一点,但是正如您在下面的链接图片中看到的那样,它弄乱了标签的位置(它们不再居中)。

有没有办法隐藏条形图标签而不会弄乱剩余标签的位置?

ggplot(data=outcome,
      aes(x = category, y=percent,fill = outcome)) +
geom_bar(stat='identity') +
coord_flip() +
geom_text(data=outcome %>% filter(percent>=0.1),aes(label = percent), size = 3,position = position_stack(vjust = 0.5),
          check_overlap=TRUE) 
Run Code Online (Sandbox Code Playgroud)

带有错位标签的堆积条形图

r data-visualization ggplot2

2
推荐指数
1
解决办法
1022
查看次数

将分类变量绘制为堆积条形图

我有一个 Pandas 数据框,如下所示:

目的贷款状况  
商业贷款 0  
商业贷款 1  
买房子 0  
买房子 1  
商业贷款 1  
买车 0  
买房子 0  
婚礼 1  
商业贷款 0  

我正在尝试制作一个堆叠条形图,其中每个类别都是 X 轴,并将 0 和 1 的计数作为它们的两个堆栈。

我该怎么做呢?我必须为每个类别手动计数还是有更聪明的方法来做到这一点?

python data-visualization pandas

2
推荐指数
1
解决办法
1748
查看次数

向 Altair 图形添加背景实心填充

我非常喜欢 Altair 用 Python 制作图表。作为致敬,我想重新生成“错误,我们画了一些”中的经济学人图: 在此处输入图片说明 这是第一次拍摄的代码:

import numpy as np
import pandas as pd
import altair as alt

 df = pd.read_csv('http://infographics.economist.com/databank/Economist_corbyn.csv').dropna()

 bars = alt.Chart(df, title="Average number of likes per Facebook post").mark_bar().
    encode(
        y=alt.Y('Page:O', axis=alt.Axis(title=''),
        sort=alt.EncodingSortField(
           field="Average number of likes per Facebook post 2016:Q",  # The field to use for the sort
           op="sum",  # The operation to run on the field prior to sorting
           order="ascending"  # The order to sort in
       )),
       color=alt.value("#116EA1"),
       x=alt.X("Average number of likes per Facebook …
Run Code Online (Sandbox Code Playgroud)

python data-visualization altair

2
推荐指数
1
解决办法
2400
查看次数

在deck.gl 地图中动态更新Geojson 图层

我无法动态更新我在甲板上创建的图层。

我在创建初始图层(具有城市边界的要素集合 geojson)后初始化了地图。之后,我选择一个城市并尝试使用我使用 jquery-change 收听的下拉菜单将地区图层加载到地图中。我使用 gejosin.io 验证了城市和地区的 geojson,并且 voth 渲染得很好。在我的应用程序中,显示初始城市图层,但是当我更改图层实例(共享相同的 id,在文档中被告知如此)时,它不会在视图上更新。我使用了 setProps 并且在控制台中我可以看到层的数据确实在变化。唯一的问题似乎是更改未在地图中采取行动。我也尝试使用甲板(地图)的 redraw() 方法,但没有成功。

需要注意的一件事是,deck.gl 不会手动使用相关方法更新地图元素。它说它使用“反应式编程范式”。据我了解,当我们更改数据时,它会自行更新。我们使用外部函数的地方也有例外,这会导致更改没有任何效果,但我们这里不使用这样的东西。

var tarimDeck;
var typeColorList = {};

$(document).ready(function () {

    // Set the map view zone.
    $("#TarlaMapView").css("height", $(window).height() - 200 + "px").css("width", "100%");


    const LIGHT_SETTINGS = {
        lightsPosition: [-125, 50.5, 5000, -122.8, 48.5, 8000],
        ambientRatio: 0.2,
        diffuseRatio: 0.5,
        specularRatio: 0.3,
        lightsStrength: [1.0, 0.0, 2.0, 0.0],
        numberOfLights: 2
    };

    // Get cities with geojson data to place initial layers.
    // Currently cities are pulled from …
Run Code Online (Sandbox Code Playgroud)

javascript data-visualization deck.gl

2
推荐指数
1
解决办法
2735
查看次数

在 Google 表格中创建每周/每月/每年折线图,以汇总同一周/月/年范围内的金额

我想创建一个表示两列数据的折线图:F,输入日期,H,美元金额。日期应该是 X 轴,Y 轴是美元金额。

问题是我希望折线图上的日期代表在给定周、月或年中输入的所有金额的总和。

这张照片是 YouTube 分析,它创建了一个类似于我想在工作表中创建的图表:

https://imgur.com/a/fz51Rug

类似于这些分析如何让您选择您希望数据(在本例中为视图,在我的表格案例中为数量)在收集时汇总的方式,我只是想分开?图表来描绘每周、每月和每年的不同范围。

https://docs.google.com/spreadsheets/d/1P2vFfCVmsJwPLyD48YWQkwCR0jY3CPg7S9uOVlYhvkk/edit?usp=sharing 这是我想要可视化的数据类型的链接。

charts data-visualization google-sheets array-formulas google-sheets-query

2
推荐指数
1
解决办法
3744
查看次数

如何在plotly中添加多个带循环的形状

我使用 plotly 包在 python 上显示动态财务图表。但是,我没有设法使用 for 循环将所有关键点线放在一张图表上。这是我的代码:

fig.update_layout(
    for i in range(0,len(data)):
        shapes=[
            go.layout.Shape(
            type="rect",
            x0=data['Date'][i],
            y0=data['Max_alt'][i],
            x1='2019-12-31',
            y1=data['Max_ust'][i],
            fillcolor="LightSkyBlue",
            opacity=0.5,
            layer="below",
            line_width=0)])
fig.show()
Run Code Online (Sandbox Code Playgroud)

我有一个像下面这样的数据。它是基于时间序列的 EURUSD 平价金融数据集。我为 Local Min 和 Max 计算了两个约束。我想根据每个 Min_alt / Min_ust 和 Max_alt / Max_range 绘制矩形形状。我可以像下图那样只绘制一个日期,但是我没有设法在同一个绘图图中显示所有范围。

这是示例数据集

数据示例

情节示例

这是添加行的解决方案:

import datetime

colors = ["LightSkyBlue", "RoyalBlue", "forestgreen", "lightseagreen"]
ply_shapes = {}
for i in range(0, len(data1)):
    ply_shapes['shape_' + str(i)]=go.layout.Shape(type="rect",
                                                    x0=data1['Date'][i].strftime('%Y-%m-%d'),
                                                    y0=data1['Max_alt'][i],
                                                    x1='2019-12-31',
                                                    y1=data1['Max_ust'][i],
                                                    fillcolor="LightSkyBlue",
                                                    opacity=0.5,
                                                    layer="below"
                                                )
lst_shapes=list(ply_shapes.values())
fig1.update_layout(shapes=lst_shapes)
fig1.show()
Run Code Online (Sandbox Code Playgroud)

但是,我仍然有问题要向这些行添加跟踪。我的意思是文本属性。

这是我的代码:

add_trace = {}
for …
Run Code Online (Sandbox Code Playgroud)

python loops for-loop data-visualization plotly

2
推荐指数
1
解决办法
2788
查看次数

使用间隔选择时,堆叠 Altair/Vega-Lite 图表中的工具提示消失

Altair 示例库包含一个很好的示例,说明如何使用区间选择创建两个图,其中一个图允许您定义另一个图的比例。我一直在尝试通过将工具提示定义为基础的一部分来向堆叠图表的两个部分添加工具提示:

import altair as alt
from vega_datasets import data

source = data.sp500.url

brush = alt.selection(type='interval', encodings=['x'])

base = alt.Chart(source).mark_area().encode(
    x = 'date:T',
    y = 'price:Q',
    tooltip = 'price:Q'
).properties(
    width=600,
    height=200
)

upper = base

lower = base.properties(
    height=60
).add_selection(brush)

upper & lower
Run Code Online (Sandbox Code Playgroud)

这样做,工具提示在 上按预期工作,lower但在 上根本不起作用upper

在此处输入图片说明

但是,如果我删除.add_selection(brush)from lower,则工具提示也会起作用upper(未更改),但这当然违背了示例的目的。我还可以upper通过将其标记为交互式来使工具提示起作用,但同样,这破坏了示例的优点。更改upperto的定义upper = base.encode(tooltip='price:Q')没有任何作用。

我将如何定义工具提示目标,使工具提示同时显示在upper和 上lower

python data-visualization vega-lite altair

2
推荐指数
1
解决办法
360
查看次数