首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Excel散点图背景色可以根据数据值定制吗?

Excel散点图背景色可以根据数据值定制吗?
EN

Stack Overflow用户
提问于 2021-07-16 03:19:23
回答 2查看 764关注 0票数 1

我有一张5排x2的桌子。有5个数据点,每个数据点都有相应的X和Y值。X,Y值用于绘制散点图。

我想要自定义散点图的背景作为数据点本身的函数,即着色矩形的X和Y范围应该在我的控制范围内。理想情况下,我希望数据的中间值X和Y值分别生成X和Y“轴”,这是不同颜色矩形的边界。

目前,我已经选择了“形状填充”->“图片”选项,同时格式化图表区域。该图片目前是在中手工创建的,其高宽比与图表区域相同。

示例VBA代码。它从"Sheet1“中A2:B6范围内的5x2表中获取数据。

代码语言:javascript
运行
AI代码解释
复制
Sub scatter_plot_simple()
    Dim Chart1 As Chart
    Set Chart1 = Charts.Add
    With Chart1
        .ChartType = xlXYScatter
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "=""Values"""
        .SeriesCollection(1).XValues = "=Sheet1!$B$2:$B$6"
        .SeriesCollection(1).Values = "=Sheet1!C$2:$C$6"
    End With
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-16 10:58:10

尝尝这个。

“这只是基本的数学”所以代码没有注释..。;-)

编辑:将图表移动到工作表中,然后将形状绘制在(透明的)图表后面。把工作表上的网格线关掉,否则它们会显示出来.

代码语言:javascript
运行
AI代码解释
复制
Sub scatter_plot_simple()
    Const CHT_NAME As String = "QUADRANTS"
    Dim cht As Chart, rngX As Range, rngY As Range, wsData As Worksheet, co
    Dim medX, medY, wsChart As Worksheet
    
    Set wsChart = Worksheets("Chart")
    Set wsData = Worksheets("Data")
    Set rngX = wsData.Range("B2:B400")
    Set rngY = wsData.Range("C2:C400")
    
    DeleteAllShapes wsChart
    
    'hosting the chart on a worksheet...
    Set co = wsChart.Shapes.AddChart2(240, xlXYScatter)
    co.Name = CHT_NAME
    co.Fill.Visible = msoFalse 'no background
    co.Top = 10
    co.Left = 10
    co.Width = 400
    co.Height = 400
    
    Set cht = co.Chart
    ClearSeries cht    'make sure no "auto-plotted" series
    With cht
        .ChartType = xlXYScatter
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "Data"
        .SeriesCollection(1).XValues = rngX
        .SeriesCollection(1).Values = rngY
        .PlotArea.Format.Fill.Visible = msoFalse 'no background
    End With
    
    medX = Application.Median(rngX)
    medY = Application.Median(rngY)
    
    AddQuadrants cht, medX, medY
    
End Sub

Sub AddQuadrants(cht As Chart, medX, medY)
 
    Dim minX, maxX, minY, maxY, xAxis As Axis, yAxis As Axis
    Dim xSpan, ySpan, shp1, Q1 As Shape, Q2 As Shape, Q3 As Shape, Q4 As Shape
    Dim Q1W, Q1H, ws As Worksheet, co As Object, posTop As Long, posleft As Long
    
    Set co = cht.Parent 'chartobject (a container for the chart when hosted on a worksheet)
    Set ws = co.Parent  'the hosting worksheet
    
    Set xAxis = cht.Axes(xlCategory)
    Set yAxis = cht.Axes(xlValue)
    
    minX = xAxis.MinimumScale
    maxX = xAxis.MaximumScale
    xSpan = maxX - minX
    
    minY = yAxis.MinimumScale
    maxY = yAxis.MaximumScale
    ySpan = maxY - minY
    
    Q1W = ((medX - minX) / xSpan) * xAxis.Width
    Q1H = ((maxY - medY) / ySpan) * yAxis.Height
    
    posTop = 4 + co.Top + yAxis.Top     'fudging this a bit...
    posleft = 4 + co.Left + xAxis.Left  'fudging this a bit...
    
    Set Q1 = Quadrant(ws, posleft, posTop, Q1W, Q1H, vbYellow)
    Set Q2 = Quadrant(ws, posleft + Q1W, posTop, xAxis.Width - Q1W, Q1H, vbRed)
    Set Q3 = Quadrant(ws, posleft, posTop + Q1H, Q1W, yAxis.Height - Q1H, vbBlue)
    Set Q4 = Quadrant(ws, posleft + Q1W, posTop + Q1H, _
                      xAxis.Width - Q1W, yAxis.Height - Q1H, vbGreen)
    
End Sub

Function Quadrant(ws As Worksheet, l, t, w, h, clr As Long) As Shape
    Dim rv As Shape
    Set rv = ws.Shapes.AddShape(msoShapeRectangle, l, t, w, h)
    rv.Fill.ForeColor.RGB = clr
    rv.Fill.Transparency = 0.9
    rv.Fill.Solid
    rv.Line.Visible = False
    rv.ZOrder msoSendToBack
    Set Quadrant = rv
End Function

Sub ClearSeries(cht As Chart)
    Do While cht.SeriesCollection.Count > 0
        cht.SeriesCollection(1).Delete
    Loop
End Sub

Sub DeleteAllShapes(ws As Worksheet)
    Do While ws.Shapes.Count > 0
       ws.Shapes(1).Delete
    Loop
End Sub

或者没有VBA:https://peltiertech.com/excel-chart-with-colored-quadrant-background/

票数 1
EN

Stack Overflow用户

发布于 2021-07-16 06:08:50

请试试下一段代码。它将创建矩形,对其着色,分组,导出组图片,并将其添加为绘图仪区域用户图片。没有时间评论代码。如果不清楚,我会在几个小时后,当我在家的时候发表评论:

代码语言:javascript
运行
AI代码解释
复制
Sub scatter_plot_simple()
    Dim sC As Chart, sh As Worksheet, Chart1 As Chart, sGr As Shape, s As Shape, s1 As Shape, s2 As Shape
    Dim pltH As Double, pltW As Double, pltAH As Double, pltAW As Double, i As Long, j As Long, k As Long
    Dim maxX As Long, maxY As Long, majUnitY As Long, topS As Double, leftS As Double
    
    majUnitY = 20 'major unity for X axes
    'delete the previous chart (used for testing)
    For Each sC In Charts
        Application.DisplayAlerts = False
            If sC.Name = "MyChart" Then sC.Delete: Exit For
        Application.DisplayAlerts = True
    Next
    Set sh = Sheets("Sheet1")
    Set Chart1 = Charts.Add
    With Chart1
        .Name = "MyChart"
        .ChartType = xlXYScatter
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "=""Values"""
        .SeriesCollection(1).XValues = "=" & sh.Name & "!B2:B6"
        .SeriesCollection(1).Values = "=" & sh.Name & "!C2:C6"
        .Axes(xlCategory).MajorUnit = majUnitY
        maxX = .Axes(xlCategory).MaximumScale             'maximum scale of X axes
        pltAH = .PlotArea.height: pltAW = .PlotArea.width 'plot area height
        maxY = .Axes(xlValue).MaximumScale                'maximum scale of X axes
        'extract dimensions of the future rectangles to be created:
        pltH = .PlotArea.height / maxY: pltW = .PlotArea.width / (maxX / majUnitY)
    End With
    'create the rectangle equal to chart Plot area:
    Set s = sh.Shapes.AddShape(msoShapeRectangle, 0, 0, pltAW, pltAH)
    s.Fill.ForeColor.RGB = RGB(255, 255, 255) 'white color
    topS = 0: leftS = 0
    Dim maxGreen As Long  ' variable to be used to change the rectangle colors
    maxGreen = 2
    'create the necessary colored rectangles to reflect the maximum X and maximum Y
    For j = 1 To maxX / majUnitY
        For i = 1 To 6
            Set s1 = sh.Shapes.AddShape(msoShapeRectangle, leftS, topS, pltW, pltH)
            With s1
                .Select
                'color rectangles according to their position:
                .Fill.ForeColor.RGB = IIf(6 - i >= maxGreen, IIf(j = 1, RGB(201, 163, 102), RGB(138, 197, 139)), IIf(j = 1, RGB(231, 157, 126), RGB(145, 208, 215)))
                .line.Weight = 2
                .line.ForeColor.RGB = RGB(255, 255, 255)
            End With
            If i = 1 And j = 1 Then  'group the big rectangle (plot area dimensions) with the first rectangle
                Set sGr = sh.Shapes.Range(Array(s.Name, s1.Name)).Group
            Else
                'group the previous group with the created rectangle
                Set sGr = sh.Shapes.Range(Array(sGr.Name, s1.Name)).Group
            End If
            topS = topS + pltH  'increment Top position for the future rectangle
        Next i
        'adding the rectangles slices over the existing rectangles in second column:
        If j = 2 Then
            topS = 0
            For k = 1 To 6
                Set s2 = sh.Shapes.AddShape(msoShapeRectangle, leftS + 2, topS + 2, pltW / 3, pltH - 4)
                With s2
                    .Select
                    If 6 - k >= maxGreen Then
                        .Fill.ForeColor.RGB = RGB(201, 163, 102)
                        .line.ForeColor.RGB = RGB(201, 163, 102)
                    Else
                        .Fill.ForeColor.RGB = RGB(231, 157, 126)
                        .line.ForeColor.RGB = RGB(231, 157, 126)
                    End If
                End With
                Set sGr = sh.Shapes.Range(Array(sGr.Name, s2.Name)).Group
                topS = topS + pltH
            Next k
            
        End If
        leftS = leftS + pltW: topS = 0 'increment the left possition and reset the Top poz to zero
    Next j
    'Part of exporting the created group as picture:
    Dim pictPath As String
    pictPath = ThisWorkbook.path & "\chartPict.jpg" 'the path where to be saved
    ExportShPict sGr, sh, pictPath                          'export function
    Chart1.PlotArea.Format.Fill.UserPicture pictPath   'place the exported picture to the chart plot area
    sGr.Delete                                                   'delete the helper group
    Chart1.Activate                                            'activate the chart sheet
    MsgBox "Ready..."
End Sub

Private Sub ExportShPict(s As Shape, sh As Worksheet, pictPath As String)
   Dim ch As ChartObject
   'create a new chart using the shape (group) dimensions
   Set ch = sh.ChartObjects.Add(left:=1, top:=1, width:=100, height:=100)
   ch.width = s.width: ch.height = s.height
   'copy the group picture on the newly created chart
   s.CopyPicture: ch.Activate: ActiveChart.Paste
   'export the chart which practically means only the picture
   ch.Chart.Export FileName:=pictPath, FilterName:="JPG"
   ch.Delete 'delete the helper chart
End Sub

我推导出了改变垂直轴颜色的逻辑,但是你没有提到X轴上的位置,也就是向下的颜色要改变的位置。如果这方面是清楚的,一些较小的矩形可以放置在第二个矩形列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68408135

复制
相关文章
REST API和GraphQL API的比较
REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。 RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。 为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。 主体包含客户端想要传输到服务器的数据,例如请求的有效负载。
用户4235284
2023/10/14
6060
REST API和GraphQL API的比较
GraphQL API渗透测试指南
GraphQL 是一种面向数据的 API 查询风格。传统的 API 拿到的是前后端约定好的数据格式,GraphQL 对 API 中的数据提供了一套易于理解的完整描述,客户端能够准确地获得它需要的数据,没有任何冗余,也让 API 更容易地随着时间推移而演进。
小阑本阑
2023/09/05
1.5K0
GraphQL API渗透测试指南
为 Django 配备 GraphQL API
前文再见 REST,你好 GraphQL提到,GraphQL 使得前端按需请求后端数据,前后端接口不再高度耦合,可以大大提高前后端的开发效率,从而快速进行产品迭代。Github v4 版外部 API 只使用 GraphQL,可见 GraphQL 是一个明显的趋势,值得我们去学习和使用。今天就分享一下如何为 Django 配置 GraphQL API。
somenzz
2021/07/01
8810
为 Django 配备 GraphQL API
GraphQL 可代替 REST API ?
不知不觉地「歇」了好久。一个习惯的养成只需要21天,但习惯的坚持并没有想象中那么容易。
FoamValue
2022/08/22
6870
GraphQL 可代替 REST API ?
为 Vue 配置 GraphQL API
接前文为 Django 配备 GraphQL API,Django 提供 GraphQL 接口服务之后,我们需要让前端来消费这些接口数据,以 Vue 为例,看一看前端如何访问后端 GraphQL API。本文提供一个跑的通的 demo,可以先收藏,后面如有需要可以直接使用。
somenzz
2021/07/01
1.2K0
为 Vue 配置 GraphQL API
Github GraphQL API - Data Integration
See @octokit/request for full documentation of the .request method.
szhshp
2022/09/21
3160
【Graphql实践】使用 Apollo(iOS) 访问 Github 的 Graphql API
最近在协助调研 Apollo 生成的代码是否有可能跨 Query 共享模型的问题,虽然初步结论是不能,并不是预期的结果,但是在调研过程中积累的一些经验,有必要记录下。如果你也对 Graphql 感兴趣,不妨先从 Github 的 Graphql API 来切手实践。
ios122
2018/07/31
1.4K0
人人都是 API 设计者:我对 RESTful API、GraphQL、RPC API 的思考
有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设计的思考。首先,为什么写这个话题呢?其一,我阅读了《阿里研究员谷朴:API 设计最佳实践的思考》一文后受益良多,前两天并转载了这篇文章也引发了广大读者的兴趣,我觉得我应该把我自己的思考整理成文与大家一起分享与碰撞。其二,我觉得我针对这个话题,可以半个小时之内搞定,争取在 1 点前关灯睡觉,哈哈。
用户2781897
2019/05/17
1.1K0
为什么GraphQL是API的未来[每日前端夜话0x50]
自从 Web 开始迅猛发展,对程序员来说开发 API 是一项很艰巨的任务。我们开发 API 的方式必须随着时间的推移而发展,以便我们始终可以开发良好、直观且设计良好的API。
疯狂的技术宅
2019/04/23
1.6K0
为什么GraphQL是API的未来[每日前端夜话0x50]
API接口架构REST vs GraphQL
无论是创建网站,还是移动应用程序,我们都需要通过 API 来传递数据,通过 API 我们可以获取到数据库中的数据,可以操作数据库,可以处理一些业务逻辑。现在最流行的 API 架构是 REST。但是,GraphQL 正在逐渐追赶着它。
程序那些事儿
2023/03/07
1.7K0
API接口架构REST vs GraphQL
安息吧 REST API,GraphQL 长存
即使与 REST API 打交道这么多年,当我第一次了解到 GraphQL 和它试图解决的问题时,我还是禁不住把本文的标题发在了 Twitter 上。
疯狂的技术宅
2019/03/27
2.7K0
安息吧 REST API,GraphQL 长存
GraphQL 初体验,Node.js 构建 GraphQL API 指南
过去几年中,GraphQL 已经成为一种非常流行的 API 规范,该规范专注于使客户端(无论是客户端、前端还是第三方)的数据获取更加容易。
coder_koala
2021/01/08
8.4K1
GraphQL是API的未来,但它并非银弹
我认为,GraphQL 将改变世界。将来,你可以使用 GraphQL 查询世界上的任何系统。我在创造这样的未来。那么我为什么要对使用 GraphQL 进行辩驳呢?我个人最讨厌的是,社区一直在宣传 GraphQL 的好处,而这些好处却非常普通,并且与 GraphQL 实际上没有任何关系。如果我们想推广采用,那么我们应该诚实,应该摘掉有色眼镜。这篇文章是对 Kyle Schrade 的文章“为什么使用 GraphQL”的回应。这并不是批评。这篇文章是一个很好的讨论基础,因为它代表了我在社区中经常听到的观点。如果你读了整篇文章,当然这会花一些时间,你就会完全理解,为什么我认为 Kyle 的文章应该改名为“为什么使用 Apollo”。
深度学习与Python
2020/12/18
2K0
防止你的GraphQL API被恶意查询
原英文: https://blog.apollographql.com/securing-your-graphql-api-from-malicious-queries-16130a324a6b
javascript.shop
2019/09/04
1.9K0
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
本文比较了标准 API 和服务,以通过 Internet 查询数据以进行分析、集成和数据管理。
架构师研究会
2022/05/25
2.2K0
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
GraphQL + Space Cloud 简化你的API设计
服务端API的设计与开发,为客户端提供产品业务所需要的各种功能和数据接口。随着APP产品的迭代更新,APP Server提供的接口往往也会进行多个版本的迭代更新。如何优雅的维护接口的稳定性,设计扩展性满足将来一定的业务需求变更,一直是从事服务端接口开发工程师需要不断思考的问题。
曲奇泡芙
2020/03/06
1.5K0
在 Laravel 应用中构建 GraphQL API
昨天我们学习了 在 Visual Code 中搭建 Laravel 环境,现在我们来学习 Facebook 的 GraphQL 。
猿哥
2019/07/24
3.5K0
在以太坊上构建 GraphQL API
dapp[5]的数量继续爆炸性增长,对开发人员(使用 Solidity[6]或其他区块链语言的)的需求[7]也越来越大。
Tiny熊
2021/06/10
1.8K0
在以太坊上构建 GraphQL API
API的计量与限速 | 将一个Web API纳入API管理 |API Management学习第二篇
在本文中,我们将针对:API Management学习第一篇中编写的Restful API,进行纳管。
魏新宇
2018/07/30
9570
API的计量与限速 | 将一个Web API纳入API管理 |API Management学习第二篇
点击加载更多

相似问题

将多部分请求从一个GraphQL API转发到其他GraphQL API。

11

参数从一个api传递到另一个api中。

20

Node.js将值从一个api传递到另一个api。

10

使用Vue.js将数据从一个API传递到另一个API。

11

将JWT令牌从一个SPRING API传递到另一个API的最佳方法

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文