Выведите логарифмические оси на печать с matplotlib в Python

В настоящее время я использую APIView и @swagger_auto_schema для определения документации моей конечной точки.

В приведенном ниже коде вы можете увидеть, как добавить дополнительную информацию для определения вашей конечной точки. Я надеюсь, что это поможет вам

##serializers.py

class CategorySerializer(serializers.ModelSerializer):
    """
    Serializing Categories 
    """
    class Meta:
        model = Category
        fields = [
            'id', 'name', 'slug'
        ]
        read_only_fields = [
           'slug', 
        ]


##views.py

username_param = openapi.Parameter('username', in_=openapi.IN_QUERY, description='Username',
                                type=openapi.TYPE_STRING)
email = openapi.Parameter('email', in_=openapi.IN_QUERY, description='Email',
                                type=openapi.TYPE_STRING)  
category_response = openapi.Response('response description', CategorySerializer)    

class CategoryList(APIView):
    permission_classes = [AllowAny]

    @swagger_auto_schema(
        manual_parameters=[username_param, email],
        query_serializer=CategorySerializer,
        responses = {
            '200' : category_response,
            '400': 'Bad Request'
        },        
        security=[],
        operation_id='List of categories',
        operation_description='This endpoint does some magic',
    )
    def get(self, request, format=None):
        """
        GET:
        Return a list of all the existing categories.
        """
        categories = Category.objects.all()
        serializer = CategorySerializer(categories, many=True)
        return Response(serializer.data)


    @swagger_auto_schema(
        request_body=CategorySerializer,
        query_serializer=CategorySerializer,
        responses={
            '200': 'Ok Request',
            '400': "Bad Request"
        },
        security=[],
        operation_id='Create category',
        operation_description='Create of categories',
    )
    def post(self, request, format=None):
        """
        POST:
        Create a new category instance.
        """
        serializer = CategorySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(created_by=self.request.user)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Наконец, если вы хотите увидеть свои конечные точки в группах по ссылке, вы можете протестировать комментирование строки ниже в вашем urls.py

#urlpatterns = format_suffix_patterns(urlpatterns)

Ниже приведен экран того, как вы должны его видеть

[home][1]
[Get all categories][2]
[Post a new category][3]
[Endpoints in groups][4]

You can find more information in the link below

https://drf-yasg.readthedocs.io/en/stable/custom_spec.html

  [1]: https://i.stack.imgur.com/iwsnB.png
  [2]: https://i.stack.imgur.com/R7f1q.png
  [3]: https://i.stack.imgur.com/1ia9F.png
  [4]: https://i.stack.imgur.com/Gwckf.png
325
задан Max Ghenis 15 January 2018 в 07:34
поделиться

3 ответа

Вы просто нужно использовать полулогию вместо сюжета:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()
63
ответ дан 23 November 2019 в 00:51
поделиться

Вы можете использовать метод Axes.set_yscale . Это позволяет изменять масштаб после создания объекта Axes . Это также позволит вам создать элемент управления, позволяющий пользователю выбирать масштаб, если это необходимо.

Соответствующая строка для добавления:

ax.set_yscale('log')

Вы можете использовать 'linear' , чтобы вернуться к линейная шкала. Вот как будет выглядеть ваш код:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)

ax.set_yscale('log')

pylab.show()

result chart

340
ответ дан 23 November 2019 в 00:51
поделиться

Во-первых, не очень удобно смешивать код pylab и pyplot . Более того, стиль pyplot предпочтительнее использования pylab .

Вот немного очищенный код, использующий только функции pyplot :

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

Соответствующая функция - pyplot.yscale () . Если вы используете объектно-ориентированную версию, замените ее методом Axes.set_yscale () . Помните, что вы также можете изменить масштаб оси X, используя pyplot.xscale () (или Axes.set_xscale () ).

Проверьте мой вопрос В чем разница между «log» и «symlog»? , чтобы увидеть несколько примеров шкал графиков, которые предлагает matplotlib.

268
ответ дан 23 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: