Plot 在x轴上使用名称而不是数字在球拍中绘图

Plot 在x轴上使用名称而不是数字在球拍中绘图,plot,scheme,racket,Plot,Scheme,Racket,我可以使用上显示的以下代码绘制点: 但是,如何绘制x轴点具有名称而不是数字的位置: (define xs '(AA BB CC DD AA CC)) 使用上述代码进行尝试会显示一条很长的错误消息: points: contract violation expected: Real given: 'AA in: an element of an element of the 1st argument of (->* ((sequ

我可以使用上显示的以下代码绘制点:

但是,如何绘制x轴点具有名称而不是数字的位置:

(define xs '(AA BB CC DD AA CC))
使用上述代码进行尝试会显示一条很长的错误消息:

points: contract violation
  expected: Real
  given: 'AA
  in: an element of
      an element of
      the 1st argument of
      (->*
       ((sequence/c (sequence/c Real)))
       (#:alpha
        Nonnegative-Real
        #:color
        (or/c
         Integer
         Symbol
         String
         (recursive-contract g2149 #:impersonator)
         (cons/c
          Real
          (cons/c Real (cons/c Real ()))))
        #:fill-color
        (or/c
         Integer
         Symbol
         String
         (recursive-contract g2149 #:impersonator)
         (cons/c
          Real
          (cons/c Real (cons/c Real ()))))
        #:label
        (or/c #f String)
        #:line-width
        Nonnegative-Real
        #:size
        Nonnegative-Real
        #:sym
        (or/c
         Integer
         Char
         String
         dot
         point
         pixel
         plus
         times
         asterisk
         5asterisk
         odot
         oplus
         otimes
         oasterisk
         o5asterisk
         circle
         square
         diamond
         triangle
         fullcircle
         fullsquare
         fulldiamond
         fulltriangle
         triangleup
         triangledown
         triangleleft
         triangleright
         fulltriangleup
         fulltriangledown
         fulltriangleleft
         fulltriangleright
         rightarrow
         leftarrow
         uparrow
         downarrow
         4star
         5star
         6star
         7star
         8star
         full4star
         full5star
         full6star
         full7star
         full8star
         circle1
         circle2
         circle3
         circle4
         circle5
         circle6
         circle7
         circle8
         bullet
         fullcircle1
         fullcircle2
         fullcircle3
         fullcircle4
         fullcircle5
         fullcircle6
         fullcircle7
         fullcircle8)
        #:x-max
        (or/c Real #f)
        #:x-min
        (or/c Real #f)
        #:y-max
        (or/c Real #f)
        #:y-min
        (or/c Real #f))
       any)
  contract from: 
      <pkgs>/plot-lib/plot/private/plot2d/point.rkt
  blaming: anonymous-module
   (assuming the contract is correct)
  at: <pkgs>/plot-lib/plot/private/plot2d/point.rkt:47.9
积分:违反合同
预期:真实
给出:“AA
在:元素
元素
第一个论点
(->*
((sequence/c(sequence/c Real)))
(#:α)
非负实
#:颜色
(或)
整数
象征
一串
(递归合约g2149#:模拟者)
(续)
真实的
(cons/c Real(cons/c Real((())))
#:填充颜色
(或)
整数
象征
一串
(递归合约g2149#:模拟者)
(续)
真实的
(cons/c Real(cons/c Real((())))
#:标签
(或/c#f字符串)
#:线宽
非负实
#:尺寸
非负实
#:sym
(或)
整数
烧焦
一串
点
指向
像素
加
时代
星号
5星号
奥多
奥普拉斯
有时
绿洲
O5星号
圆圈
广场
钻石
三角形
整圈
全场
全钻石
全三角
三角
三角城
三角形左
三角光
全三角
全速前进
全三角形左
全三角光
向右箭头
左箭头
向上箭头
向下箭头
4星
五星
6星
七星
8星
全4星
五星级
全6星
全七星
满8星
圆圈1
圆圈2
圆圈3
圆圈4
圆圈5
圆圈6
圆圈7
圆圈8
子弹
完整圆圈1
完整圆圈2
完整圆圈3
完整圆圈4
完整圆圈5
完整圆圈6
完整圆圈7
完整圆圈8)
#:x-max
(或c/Real#f)
#:x-min
(或c/Real#f)
#:y-max
(或c/Real#f)
#:y-min
(或c/Real#f))
(任何)
合同来自:
/绘图库/plot/private/plot2d/point.rkt
责备:匿名模块
(假设合同是正确的)
at:/plot lib/plot/private/plot2d/point.rkt:47.9

如何绘制x轴具有组名而不是数字的绘图?

您可能正在执行以下两种操作之一。我的第一个猜测是,你正在绘制某种柱状图;也就是说,您的X代表不同的类别。在这种情况下,您可能希望使用,例如,
离散直方图
。在这种情况下,你会写

#lang racket
(require plot)
(define xs '(AA BB CC DD AA CC))
(define ys '(0 1 4 9 16 25))
(plot (discrete-histogram (map vector xs ys) #:color 'red))
如果这不是你想要的,请告诉我们

编辑:根据下面的讨论,以下是如何为某些值更新勾号标签

#lang racket

(require plot)

(define current-layout
  (ticks-layout (plot-x-ticks)))
(define current-formatter
  (ticks-format (plot-x-ticks)))

(define my-label-hash
  (hash 1 "AA"
        2 "BB"))

(parameterize
    ([plot-x-ticks
      (ticks (ticks-layout (plot-x-ticks))
             (λ (min max pre-ticks)
               (define default-layed-out
                 (current-formatter min max pre-ticks))
               (for/list ([pt (in-list pre-ticks)]
                          [default (in-list default-layed-out)])
                 (or (hash-ref my-label-hash (pre-tick-value pt) #f)
                     default))))])
  (plot (function (λ (x) x))
        #:x-min 0
        #:x-max 4))

是的,我只是想画一个直方图。谢谢。但是2个AA点和2个CC点在这里被绘制为单独的条形图。如何将这些点仅绘制为点而不是直方图,以及对应的单个x轴标记上的2个AA和CC点。另外,如果你能提到你对这种情况的第二个想法,那将是很有趣的。嗯。。。我看到您希望加入AA结果和CC结果,但我不确定您希望结果图是什么样子。可能你只想看到X轴上的AA、BB和CC,以及每个标签上方的一个或多个点。在本例中,您应该了解使用“plot-x-ticks”指定自定义刻度的功能,以及这里给出的示例。在这种情况下,您可能会将每个标签与特定的x值相关联,然后按x值收集点,然后根据需要对它们进行标记。我希望看到x轴上的AA、BB和CC,以及每个标签上方的一个或多个点。此页()有数字、日期、时间和货币的方法,但没有名称或类别。它有这些方法,但它似乎还提供了一组更通用的函数,允许您指定自己的。。。好的,为你写了一些代码。请参见上面的“编辑以回答”。
#lang racket

(require plot)

(define current-layout
  (ticks-layout (plot-x-ticks)))
(define current-formatter
  (ticks-format (plot-x-ticks)))

(define my-label-hash
  (hash 1 "AA"
        2 "BB"))

(parameterize
    ([plot-x-ticks
      (ticks (ticks-layout (plot-x-ticks))
             (λ (min max pre-ticks)
               (define default-layed-out
                 (current-formatter min max pre-ticks))
               (for/list ([pt (in-list pre-ticks)]
                          [default (in-list default-layed-out)])
                 (or (hash-ref my-label-hash (pre-tick-value pt) #f)
                     default))))])
  (plot (function (λ (x) x))
        #:x-min 0
        #:x-max 4))